079.PyQt5_QGridLayout_表格布局

  

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 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_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值