PySide6布局
GUI编程中,无论创建窗体还是改变窗体大小,窗体中的控件位置和大小布局是非常麻烦的,而PySide6简化了这一过程。
三种布局模式
- QHBoxLayout: 水平布局类,控件从左向右;
- QVBoxLayout: 垂直布局类,控件从上到下;
- QGridLayout: 网格布局类,网格型布局;
这三种布局可以嵌套。
实例
from PySide6.QtWidgets import QApplication, QDialog, QLabel, QLineEdit, QPushButton, QHBoxLayout, QVBoxLayout
import sys
class Dialog(QDialog):
def __init__(self):
super(Dialog, self).__init__() # 必须调用父类 __init__
# 创建控件,这儿不需要指定父窗口
self.name_label = QLabel("姓名:")
self.name_lineedit = QLineEdit()
self.ok_button = QPushButton("确定")
self.cancel_button = QPushButton("取消")
# 设置name_label标签和lineedit的关系
self.name_label.setBuddy(self.name_lineedit)
# 创建顶部的水平布局,并将俩个控件按顺序添加
top_lay = QHBoxLayout()
top_lay.addWidget(self.name_label)
top_lay.addWidget(self.name_lineedit)
# 创建底部的水平布局,并将俩个控件按顺序添加
bottom_lay = QHBoxLayout()
bottom_lay.addStretch() # 先在最左边加入“弹簧”
bottom_lay.addWidget(self.ok_button)
bottom_lay.addWidget(self.cancel_button)
# 创建主布局(垂直),并将以上俩个布局加入
main_lay = QVBoxLayout()
main_lay.addLayout(top_lay)
main_lay.addLayout(bottom_lay)
self.setLayout(main_lay) # 设为窗体布局
self.setFixedHeight(self.sizeHint().height()) # 设置固定高度(宽度可调节)
self.setWindowTitle("布局演示") # 设置窗口标题
if __name__ == "__main__":
app = QApplication()
w = Dialog()
w.show()
sys.exit(app.exec())
运行效果(调整宽度后有“弹簧”效果):
几个关键方法:
- addWidget(),添加控件
- addLayout(),添加布局
- addStretch(),添加“弹簧”
- setLayout(), 设为窗口布局