我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
QGridLayout 表格布局
- 描述
- 网格布局
- 取可用空间(通过其父布局或parentWidget())将其划分为行和列,并将其管理的每个窗口小控件放入正确的单元格中
- 每列/行具有最小宽度和拉伸系数
- 最小宽度使用
set xxxx MinimumWidth()
- 拉伸因子使用
set xxxx Stretch()
- 最小宽度使用
- 功能作用
- 构造函数
QGridLayout(QWidget) QGridLayout()
- 元素操作
- 添加子控件
# 添加子控件,每行添加一个 addWidget(self, QWidget) # 将子控件添加到指定行和列的位置,并可以设置对齐方式 addWidget(self, QWidget, int, int, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment()) # 合并单元格模式。将子控件添加到指定开始行和开始列,指定合并多少行、多少列,并设置对齐方式 addWidget(self, QWidget, int, int, int, int, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment())
- 添加子布局
# 将子布局添加到指定行和列的位置,并可以设置对齐方式 addLayout(self, QLayout, int, int, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment()) # 合并单元格模式。将子布局添加到指定开始行和开始列,指定合并多少行、多少列,并设置对齐方式 addLayout(self, QLayout, int, int, int, int, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment())
- 获取条目位置
getItemPosition(self, int) -> Tuple[int, int, int, int] # 获取指定第几个条目位置(根据添加顺序) # 返回一个元组[所在行索引, 所在列索引, 占据行数, 占据列数]
- 获取条目
itemAtPosition(self, int, int) -> QLayoutItem # 获取指定行和列所在位置的条目 QLayoutItem.widget() # 获取条目中的控件对象 QLayoutItem.widget().text() # 获取条目中控件的文本信息 QLayoutItem.layout() # 获取条目中的布局管理器对象
- 添加子控件
- 列宽、行高、拉伸系数设置
setColumnMinimumWidth(self, int, int) # 设置指定索引列的最小列宽 setColumnStretch(self, int, int) # 设置指定索引列的伸缩因子 columnMinimumWidth(self, int) -> int # 获取指定索引列最小宽度 setColumnStretch(self, int, int) # 获取指定索引列伸缩因子 setRowMinimumHeight(self, int, int) # 设置指定索引行的最小行高 setRowStretch(self, int, int) # 设置指定索引行的伸缩因子 rowMinimumHeight(self, int) -> int # 获取指定索引行最小高度 rowStretch(self, int) -> int # 获取指定索引行伸缩因子
- 间距
setVerticalSpacing(self, int) # 设置垂直方向间距(行间距) verticalSpacing()->int # 获取垂直方向间距,当垂直方向间距不一致时,返回-1 setHorizontalSpacing(self, int) # 设置水平方向间距(列间距) horizontalSpacing()->int # 获取水平方向间距,当水平方向间距不一致时,返回-1 setSpacing(self, int) # 同时设置水平方向和垂直方向间距 spacing()->int # 获取水平和垂直方向间距,当水平和垂直方向间距不一致时,返回-1
- 原点角设置
- 设置(0, 0)位置从什么地方开始
setOriginCorner(self, Qt.Corner) # 设置用于网格原点的角,即位置 (0, 0) # 参数:Qt.Corner # Qt.TopLeftCorner # 矩形的左上角(默认)。 # Qt.TopRightCorner # 矩形的右上角 # Qt.BottomLeftCorner # 矩形的左下角 # Qt.BottomRightCorner # 矩形的右下角
- 信息获取
rowCount(self) -> int # 获取总行数 columnCount(self) -> int # 获取总列数 cellRect(self, int, int) -> QRect # 获取指定单元格
- 示例代码
- 示例1:QGridLayout-功能作用
from PyQt5.Qt import * import sys class Windows(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QGridLayout-功能作用') self.resize(350, 180) self.widget_list() def widget_list(self): self.add_widget() def add_widget(self): g_layout = QGridLayout() self.setLayout(g_layout) btn1 = QPushButton('按钮1') btn2 = QPushButton('按钮2') btn3 = QPushButton('按钮3') btn4 = QPushButton('按钮4') btn5 = QPushButton('按钮5') btn6 = QPushButton('按钮6') btn7 = QPushButton('按钮7') btn8 = QPushButton('按钮8') btn9 = QPushButton('按钮9') # f_layout = QFormLayout() # f_layout.addRow(btn8, btn9) # f_layout = QHBoxLayout() # f_layout.addWidget(btn8) # f_layout.addWidget(btn9) # 添加子控件/子布局 # g_layout.addWidget(btn1, 0, 0) # g_layout.addWidget(btn4, 1, 0, 1, 3) # g_layout.addWidget(btn2, 0, 1) # g_layout.addWidget(btn3, 0, 2) # g_layout.addWidget(btn5, 2, 0) # g_layout.addWidget(btn6, 2, 1) # g_layout.addWidget(btn7, 2, 2) # g_layout.addLayout(f_layout, 3, 0, 1, 3) # 按添加顺序获取控件所在的行号、列号,占用行数、列数 # print(g_layout.getItemPosition(1)) # 获取指定行、列所在位置的条目 # print(g_layout.itemAtPosition(0, 0)) # 通过条目获取条目中的控件及文本内容 # print(g_layout.itemAtPosition(0, 0).widget().text()) # 通过条目获取条目中的子布局 # print(g_layout.itemAtPosition(3, 0).layout()) # 给指定列设置最小列宽 # g_layout.setColumnMinimumWidth(0, 150) # g_layout.setColumnMinimumWidth(1, 250) # 给指定列设置伸缩因子 # g_layout.setColumnStretch(0, 1) # g_layout.setColumnStretch(1, 2) # g_layout.setColumnStretch(2, 3) # 给指定行设置最小行高 # g_layout.setRowMinimumHeight(0, 100) # g_layout.setRowMinimumHeight(1, 200) # 给指定行设置伸缩因子 # g_layout.setRowStretch(0, 1) # g_layout.setRowStretch(1, 2) # g_layout.setRowStretch(2, 3) # g_layout.setRowStretch(3, 4) # 设置垂直方向间距 # g_layout.setVerticalSpacing(20) # # # 设置水平方向间距 # g_layout.setHorizontalSpacing(20) # 原点角设置 btn_ls = [btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9] for i in range(len(btn_ls)): row = i // 3 col = i % 3 g_layout.addWidget(btn_ls[i], row, col) # g_layout.addWidget(btn1, 0, 0) # g_layout.addWidget(btn2, 0, 1) # g_layout.addWidget(btn3, 0, 2) # g_layout.addWidget(btn4, 1, 0) # g_layout.addWidget(btn5, 1, 1) # g_layout.addWidget(btn6, 1, 2) # g_layout.addWidget(btn7, 2, 0) # g_layout.addWidget(btn8, 2, 1) # g_layout.addWidget(btn9, 2, 2) g_layout.setOriginCorner(Qt.TopLeftCorner) # g_layout.setOriginCorner(Qt.TopRightCorner) # g_layout.setOriginCorner(Qt.BottomLeftCorner) # g_layout.setOriginCorner(Qt.BottomRightCorner) # 信息获取 print(g_layout.rowCount()) # 获取总行数 print(g_layout.columnCount()) # 获取总列数 print(g_layout.cellRect(1, 2)) # 获取指定单元格对象 if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())