上QQ阅读APP看书,第一时间看更新
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所示的结果一样。