PyQt5网格布局(QGridLayout)是一种将窗口分割成行和列进行排列的布局管理方式。它通过addWidget等方法将控件添加到指定的行和列中,支持控件跨越多行或多列,以适应复杂的界面布局需求。网格布局允许开发者精确控制控件的位置和大小,同时能够根据窗口大小的变化自动调整控件的布局,提高用户界面的可用性和美观性。在PyQt5中,网格布局是界面设计中的重要工具之一,广泛应用于各种桌面应用程序的开发中。
import sys
from PyQt5.QtWidgets import *
class window(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('计算器')
# 准备数据
data = {
0: ["7", "8", "9", "+", "("],
1: ["4", "5", "6", "-", ")"],
2: ["1", "2", "3", "*", "<-"],
3: ["0", ".", "=", "/", "C"]
}
# 整体垂直布局
layout = QVBoxLayout()
# 输入框
edit = QLineEdit()
edit.setPlaceholderText("请输入内容")
# 把输入框添加到容器中
layout.addWidget(edit)
# 网格布局
grid = QGridLayout()
# 循环创建追加进去
for line_number, line_data in data.items():
# 此时line_number是第几行,line_data是当前行的数据
for col_number, number in enumerate(line_data):
# 此时col_number是第几列,number是要显示的符号
btn = QPushButton(number)
# grid.addWidget(btn)
grid.addWidget(btn, line_number, col_number)
# 把网格布局追加到容器中
layout.addLayout(grid)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = window()
w.show()
sys.exit(app.exec())