1.3.5 网格布局管理器QGridLayout

使用网格布局(Grid Layout)管理器时,我们可以把窗口想象成是带有网格的,如图1-18所示,而这些网格都有相应的坐标。

图1-18 窗口网格

从图1-18中我们可以得到以下信息。

(1)username_label文本控件被放到了第1行、第1列,网格坐标为(0, 0)。

(2)username_line输入框控件被放到了第1行、第2列,网格坐标为(0, 1)。

(3)password_label文本控件被放到了第2行、第1列,网格坐标为(1, 0)。

(4)password_line输入框控件被放到了第2行、第2列,网格坐标为(1, 1)。

网格坐标只在网格布局管理器中使用,与之前讲的窗口坐标无关。另外,网格坐标是用0表示第1行或者第1列的。

示例代码1-10实现了图1-18中的网格布局。

示例代码1-10

import sys
from PyQt5.QtWidgets import *
 
class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        username_label = QLabel('Username:')
        password_label = QLabel('Password:')
        username_line = QLineEdit()
        password_line = QLineEdit()
 
        g_layout = QGridLayout()               # 注释1开始
        g_layout.addWidget(username_label, 0, 0)
        g_layout.addWidget(username_line, 0, 1)
        g_layout.addWidget(password_label, 1, 0)
        g_layout.addWidget(password_line, 1, 1)
        self.setLayout(g_layout)               # 注释1结束
 
if __name__ == '__main__':
    app = QApplication([])
    window = Window()
    window.show()
    sys.exit(app.exec())

代码解释:

#1 网格布局管理器同样有addWidget()方法,我们在调用该方法时还需要传入控件的网格坐标。运行结果跟图1-18所示的结果一样。