PyQT5布局管理
*无特殊注明,所有案例只修改第一个案例的对应部分* ## 绝对定位 ```python import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * # 继承QWidget,用户界面的基本控件,提供了基本的应用构造器 # 默认情况下,构造器是没有父级的,没有父级的构造器被称为窗口(window) class Example(QWidget): # 继承父类构造 def __init__(self): super().__init__() # 使用initUI()方法创建一个GUI self.initUI() # 初始化组件 def initUI(self): # 绝对定位 lbl1 = QLabel('Zetcode', self) lbl1.move(15, 10) # 绝对定位 lbl2 = QLabel('tutorials', self) lbl2.move(35, 40) # 绝对定位 lbl3 = QLabel('for programmers', self) lbl3.move(55, 70) # 不注释了 self.setGeometry(300, 300, 300, 250) self.setWindowTitle('Absolute') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() # 进入应用的主循环中,调用exit()方法或直接销毁主控件时,主循环就会结束 sys.exit(app.exec_()) ``` ![](https://blog.coolcooltomato.com/uploads/article/绝对定位.png) ## 盒布局 ```python # 初始化组件 def initUI(self): # 创建两个按钮 okButton = QPushButton("OK") cancelButton = QPushButton("Cancel") # 创建一个水平布局 hbox = QHBoxLayout() # stretch函数在两个按钮前面增加了一块弹性空间 # 它会将按钮挤到窗口的右边 hbox.addStretch(1) # 再将按钮添加到hbox hbox.addWidget(okButton) hbox.addWidget(cancelButton) # 创建一个垂直布局 vbox = QVBoxLayout() # stretch函数在水平布局前面增加了一块弹性空间 # 它会将按钮挤到窗口的下面 vbox.addStretch(1) # 再将水平布局添加到vbox vbox.addLayout(hbox) # 将垂直布局添加到窗口 self.setLayout(vbox) # 不注释了 self.setGeometry(300, 300, 300, 250) self.setWindowTitle('Buttons') self.show() ``` ![](https://blog.coolcooltomato.com/uploads/article/盒布局.png) ## 栅格布局 ```python # 初始化组件 def initUI(self): # 创建一个QGridLayout实例,并把它放到程序窗口里 grid = QGridLayout() self.setLayout(grid) # 创建一个列表 names = ['Cls', 'Bck', '', 'Close', '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '=', '+'] # 创建按钮位置列表 positions = [(i, j) for i in range(5) for j in range(4)] # 创建按钮,并使用addWidget()方法把按钮放到布局里面 for position, name in zip(positions, names): if name == '': continue button = QPushButton(name) grid.addWidget(button, *position) # 不注释了 self.move(300, 300) self.setWindowTitle('Calculator') self.show() ``` ![](https://blog.coolcooltomato.com/uploads/article/格栅布局.png) ## 格栅跨行 ```python # 初始化组件 def initUI(self): # 创建三个标签 title = QLabel('Title') author = QLabel('Author') review = QLabel('Review') # 创建三个文本编辑器 titleEdit = QLineEdit() authorEdit = QLineEdit() reviewEdit = QTextEdit() # 创建一个QGridLayout实例 grid = QGridLayout() grid.setSpacing(10) # 放入Title grid.addWidget(title, 1, 0) grid.addWidget(titleEdit, 1, 1) # 放入Author grid.addWidget(author, 2, 0) grid.addWidget(authorEdit, 2, 1) # 放入Review # 可以指定跨行和跨列的大小 grid.addWidget(review, 3, 0) grid.addWidget(reviewEdit, 3, 1, 5, 1) # 将QGridLayout实例放到窗口里 self.setLayout(grid) # 不注释了 self.setGeometry(300, 300, 300, 250) self.setWindowTitle('Review') self.show() ``` ![](https://blog.coolcooltomato.com/uploads/article/格栅跨行.png)
创建时间:2023-04-19
|
最后修改:2023-12-27
|
©允许规范转载
酷酷番茄
首页
文章
友链