PyQt5 四种布局

一、属性和方法

知识点待总结

二、笔记相关代码

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow,QWidget, QHBoxLayout,QVBoxLayout,QGridLayout,QFormLayout, \
    QPushButton,QLabel,QCheckBox,QLineEdit
from PyQt5.QtCore import Qt
class MyWin(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(600, 500)
        self.setWindowTitle('四种布局')
        self.bar1=self.menuBar()
        self.menu1=self.bar1.addMenu('布局类型')
        f1 = self.menu1.addAction('水平布局')
        f1.triggered.connect(self.HBoxLayout)
        f2 = self.menu1.addAction('垂直布局')
        f2.triggered.connect(self.VBoxLayout)
        f3 = self.menu1.addAction('网格布局')
        f3.triggered.connect(self.GridLayout)
        f4 = self.menu1.addAction('表单布局')
        f4.triggered.connect(self.FormLayout)

        self.bar2=self.menuBar()
        self.menu2=self.bar2.addMenu('属性方法')
        g1 = self.menu2.addAction('设置对齐方式 *.setAlignment')
        g2 = self.menu2.addAction('添加控件 见代码中的详细介绍')
        g3 = self.menu2.addAction('添加弹簧 *.addStretch()')
        g4 = self.menu2.addAction('添加布局 *.addLayout()')
        g5 = self.menu2.addAction('设置父图元 *.setParent()')

        self.bar3=self.menuBar()
        self.menu3=self.bar3.addMenu('进阶知识')
        j1=self.menu3.addAction('遍历布局控件')
        j1.triggered.connect(self.BL)

        self.button1 = QPushButton('按钮1')
        self.button2 = QPushButton('按钮2')
        self.button3 = QPushButton('按钮3')
        self.label1 = QLabel('姓名')
        self.label2 = QLabel('年龄')
        self.label3 = QLabel('学历')
        self.LineEdit1=QLineEdit()
        self.LineEdit2 = QLineEdit()
        self.LineEdit3 = QLineEdit()
        self.checkbox1=QCheckBox()
        self.checkbox2 = QCheckBox()

    def HBoxLayout(self):
        self.Child_Widget_H=QWidget()
        self.Child_Widget_H.resize(self.width(),self.height())
        self.Child_Widget_H.setWindowTitle('水平布局')
        # 1.创建水平布局
        self.HLay=QHBoxLayout()
        self.Child_Widget_H.setLayout(self.HLay)
        # 2.向布局中添加控件
        self.HLay.addWidget(self.button1)
        self.HLay.addWidget(self.button2)
        self.HLay.addWidget(self.button3)
        # 3.设置对齐方式
        self.HLay.setAlignment(Qt.AlignBottom)
        '''
        参数值的含义:
            Qt.AlignLeft(左对齐)
            Qt.AlignHCenter(水平居中对齐)
            Qt.AlignRight(右对齐)
            Qt.AlignTop(顶部对齐)
            Qt.AlignVCenter(垂直居中对齐)
            Qt.AlignBottom(底部对齐)
        '''
        self.Child_Widget_H.show()
    def VBoxLayout(self):
        self.Child_Widget_V=QWidget()
        self.Child_Widget_V.resize(self.width(),self.height())
        self.Child_Widget_V.setWindowTitle('水平布局')
        # 1.创建水平布局
        self.VLay=QVBoxLayout()
        self.Child_Widget_V.setLayout(self.VLay)
        # 2.向布局中添加控件
        self.VLay.addWidget(self.button1)
        self.VLay.addWidget(self.button2)
        self.VLay.addWidget(self.button3)
        self.Child_Widget_V.show()
    def GridLayout(self):
        self.Child_Widget_G=QWidget()
        self.Child_Widget_G.resize(self.width(),self.height())
        self.Child_Widget_G.setWindowTitle('水平布局')
        # 1.创建水平布局
        GLay=QGridLayout()
        self.Child_Widget_G.setLayout(GLay)
        # 2.向布局中添加控件
        # 添加第0行控件,0行是我们平时认为的第1行
        GLay.addWidget(self.button1,0,0)
        GLay.addWidget(self.LineEdit1,0,1)
        GLay.addWidget(self.checkbox1,0,2)
        # 添加第1行控件,1行是我们平时认为的第2行
        GLay.addWidget(self.button2,1,0)
        GLay.addWidget(self.LineEdit2,1,1)
        GLay.addWidget(self.checkbox2,1,2)
        # 添加第2行控件
        GLay.addWidget(self.button3,2,0,1,3,Qt.AlignRight)
        '''
        添加控件的方法
        GLay.addWidget()
        参数:
            第1个参数   a0: Optional[QWidget]:添加的内容,可以是文本或者是widget控件;
            第2个参数   row: int:所在行;
            第3个参数   column: int:所在列;
            第4个参数   rowSpan: int:合并几行;
            第5个参数   columnSpan: int:合并几列;
            第6个参数   alignment:对齐方式
        '''
        self.Child_Widget_G.show()
    def FormLayout(self):
        self.Child_Widget_F=QWidget()
        self.Child_Widget_F.resize(self.width(),self.height())
        self.Child_Widget_F.setWindowTitle('水平布局')
        # 1.创建水平布局
        FLay=QFormLayout()
        self.Child_Widget_F.setLayout(FLay)
        # 2.向布局中添加控件,即向表单布局中添加行
        FLay.addRow(self.label1,self.LineEdit1)
        FLay.addRow(self.label2, self.LineEdit2)
        FLay.addRow(self.label3, self.LineEdit3)
        self.Child_Widget_F.show()
        print('表单布局')
    def BL(self):
        print('遍历布局')
        self.Child_Widget1=QWidget()
        self.Child_Widget1.resize(self.width(),self.height())
        self.Child_Widget1.setWindowTitle('水平布局')
        # 1.创建水平布局
        HLay=QHBoxLayout()
        self.Child_Widget1.setLayout(HLay)
        # 2.向布局中添加控件
        HLay.addWidget(self.button1)
        HLay.addWidget(self.button2)
        HLay.addWidget(self.button3)
        # 3.遍历布局中的控件
        for i in range(HLay.count()):
            item = HLay.itemAt(i)
            widget = item.widget()
            print(f"构件: {widget}")
        '''
        QHBoxLayout 的 itemAt(index) 方法用于获取指定索引位置的布局项(QLayoutItem)。如果索引超出了布局项的范围,则返回 None。
        item的属性有:
            item.widget() 布局项对应的控件
            item.layout() 布局项对应的子布局
        该方法的用途:
            在QTableWidget单元格中,添加Widget控件,在其设置布局并向布局中添加如QCheckBox控件并在布局中设置居中,使用
        QWidget.layout().itemAt().widget(),可以获取QTableWidget单元格中QCheckBox对象,并设置其属性
        '''

        self.Child_Widget1.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()

    w.show()
    app.exec()
    '''
    应用布局的步骤
        1.定义布局
        2.使用布局
        3.设置布局
        注:2,3步顺序可以颠倒。
    '''

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值