QGridLayout简介
网格布局QGridLayout 将窗口分割成行和列来进行排列,通常使用方法addWidget()将部件添加到网格布局中,或者使用方法addLayout()将一个布局添加到网格布局中,还可以通过对所添加的控件的行数与列数的跨越,来实现一个部件占据多个单元格。一个常规的QGridLayout布局如下图:
QGridLayout布局示意图
QGridLayout常用方法1:
addWidget(widet , row, col, alignment)
该方法给给网格布局添加部件,设置指定的行和列,起始位置的默认值为(0,0),其参数含义为:
- widget:所添加的控件;
- row:控件的行数,默认从0开始;
- column:控件的列数,默认从0开始;
- alignment:对齐方式.。
QGridLayout常用方法2:
addWidget(widget, fromRow, fromColulmn, rowSpan, columnSpan, alignment)
当所添加的的控件跨越很多行或者列的时候,使用这个函数,其参数含义为:
- widget:所添加的控件;
- fromRow:控件的起始行数;
- fromColumn:控件的起始列数;
- rowSpan:控件跨越的行数;
- column:控件跨越的列数;
- alignment:对齐方式.
QGridLayout类继承关系:
测试QGridLayout
测试QGridLayout布局最直观的例子,就是创建一个计算器界面,创建文件qgridlayout.py, 完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
class DemoGridLayout(QWidget):
def __init__(self, parent=None):
super(DemoGridLayout, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战PyQt5: QGridLayout Demo!')
# 设置窗口大小
self.resize(320, 320)
grid = QGridLayout(self)
#创建前三排的按钮列表,每排5个
names = ['%', 'CE', 'C','←',
'1/x', 'x²', '√x', '÷',
'7', '8', '9', '×',
'4', '5', '6', '-',
'1','2','3','+',
'±', '0', '.','=']
#上面四排的位置列表
pos = [(row,col) for row in range(6) for col in range(4)]
for pos, name in zip(pos, names):
btn = QPushButton(name, self)
btn.setMinimumSize(60, 40)
grid.addWidget(btn, *pos)
self.setLayout(grid)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoGridLayout()
window.show()
sys.exit(app.exec())
运行结果如图:
QGridLayout测试效果
本文知识点
- 使用循环语句创建多个部件;
- 指定按钮的最小显示大小;
- QGridLayout基本用法。