pyqt5布局设置

pyqt5布局设置

在Qt布局中分为四个大类

  • QBoxLayout
  • QGridLayout
  • QFormLayout
  • QStackedLayout

一、QBoxLayout(盒子布局)

垂直布局

相关代码与解析如下:

import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
    def __init__(self):
    #构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
        super().__init__()
        #确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
        self.resize(400,400)
        #将窗口的初始大小设置为400x400像素
        self.setWindowTitle("垂直布局")
        #将窗口名字设置为“垂直布局”
        layout = QVBoxLayout()
        #创建一个垂直布局对象
        btn1= QPushButton('按钮1')
        #创建按钮1
        layout.addWidget(btn1)
        # 将按钮1添加到布局中
        layout.addStretch(1)
        # 添加一个垂直伸缩空间,占用1个单位的垂直空间
        btn2 = QPushButton('按钮2')
        # 创建按钮2
        layout.addWidget(btn2)
        # 将按钮2添加到布局中
        layout.addStretch(2)
        # 添加一个垂直伸缩空间,占用2个单位的垂直空间
        btn3 = QPushButton('按钮3')
        # 创建按钮3
        layout.addWidget(btn3)
        # 将按钮3添加到布局中
        layout.addStretch(3)
        # 添加一个垂直伸缩空间,占用3个单位的垂直空间
        self.setLayout(layout)
        #将一个垂直布局管理器layout分配给MyWindow类的对象,这将使窗口内的控件按照垂直布局进行排列。

if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
    app = QApplication(sys.argv)
    #创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
    w=MyWindow()
    #意味着你可以使用变量w来引用和操作这个窗口
    w.show()
    #显示窗口
    app.exec_()
    #用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。

运行窗口如下:
在这里插入图片描述

垂直+水平布局

接下来将实现一个窗口垂直+水平布局同时存在,大概思想就是嵌套代码和解析如下:

import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
    def __init__(self):
    #构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
        super().__init__()
        #确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
        self.init_ui()
        #初始化用户界面(UI)中的各种部件和设置。用于在创建窗口或部件的时候执行一些初始化操作,以确保UI的正确设置
    def init_ui(self):
        self.resize(400,400)
        #将窗口的初始大小设置为400x400像素
        self.setWindowTitle("垂直+水平布局")
        #将窗口名字设置为“垂直+水平布局”
        external= QVBoxLayout()
        #创建一个最外层垂直布局对象
        hobby_box=QGroupBox('爱好')
        #创建一个控件组,名为hobby_box,可以添加多个按钮
        v_layout=QVBoxLayout()
        #设置三个爱好垂直摆放
        btn1= QRadioButton('彩鳞')
        btn2 = QRadioButton('小医仙')
        btn3 = QRadioButton('熏儿')
        #创建3个爱好“按钮”123
        v_layout.addWidget(btn1)
        v_layout.addWidget(btn2)
        v_layout.addWidget(btn3)
        # 将按钮1,2,3添加到v_layout中
        hobby_box.setLayout(v_layout)
        #将v_layout添加到hobby_box中
        gender_box=QGroupBox('性别')
        # 创建一个控件组,名为gender_box,可以添加多个按钮
        h_layout=QHBoxLayout()
        # 设置两个性别水平摆放
        btn4= QRadioButton('男')
        btn5 = QRadioButton('女')
        # 创建俩个“性别”按钮4,5
        h_layout.addWidget(btn4)
        h_layout.addWidget(btn5)
        # 将按钮4,5添加到h_layout中
        gender_box.setLayout(h_layout)
        # 将v_layout添加到gender_box中
        external.addWidget(hobby_box)
        external.addWidget(gender_box)
        #将hobby_box,gender_box中的内容添加到external中
        self.setLayout(external)
        #设置窗口显示为external窗口
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
    app = QApplication(sys.argv)
    #创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
    w=MyWindow()
    #意味着你可以使用变量w来引用和操作这个窗口
    w.show()
    #显示窗口
    app.exec_()
    #用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。

窗口图片:在这里插入图片描述

一、QGridLayout(九宫格布局)

设计了一个计算器的界面,代码和解析如下:

import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton,QGridLayout,QLineEdit
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
    def __init__(self):
    #构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
        super().__init__()
        #确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
        self.init_ui()
        #初始化用户界面(UI)中的各种部件和设置。用于在创建窗口或部件的时候执行一些初始化操作,以确保UI的正确设置

    def init_ui(self):
        self.resize(400,400)
        #将窗口的初始大小设置为400x400像素
        self.setWindowTitle("计算器")
        #将窗口名字设置为“计算器”
        data = {
            0:['7','8','9','+','('],
            1:['4','5','6','-',')'],
            2:['1','2','3','*','<'],
            3:['0','.','=','/','c'],
        }
        #准备九宫格要用到的数据
        external= QVBoxLayout()
        #创建一个最外层垂直布局对象
        edit=QLineEdit()
        #创建一个编辑框
        edit.setPlaceholderText('请输入内容')
        #设置了占位文本为 "请输入内容"
        external.addWidget(edit)
        # 将edit添加到external中
        grid = QGridLayout()
        #设置一个九宫格布局
        for line_number,line_data in data.items():
        #循环遍历了 data 字典中的每一行数据,其中 line_number 是行号,line_data 是行数据。
            for col_number,number in enumerate(line_data):
            #循环使用 enumerate 函数遍历了每一列的数据,其中 col_number 是列号,number 是数据。
                btn =QPushButton(number)
                #创建一个名为 btn 的按钮控件,并将其文本设置为 number。number 是数据中的值,将显示在按钮上。
                grid.addWidget(btn,line_number,col_number)
                #line_number 和 col_number 来指定按钮应该放置的行和列
        external.addLayout(grid)
        # 将grid添加到external中
        self.setLayout(external)
        #设置窗口显示为external窗口
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
    app = QApplication(sys.argv)
    #创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
    w=MyWindow()
    #意味着你可以使用变量w来引用和操作这个窗口
    w.show()
    #显示窗口
    app.exec_()
    #用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。

运行窗口图片
在这里插入图片描述

一、FormlLayout(表单布局)

制作了一个简单的登陆界面,代码与解析如下

import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtCore import Qt
#设置窗口的标题栏图标、文本对齐方式、鼠标光标形状、键盘事件处理等等
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton,QGridLayout,QLineEdit,  QFormLayout
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
    def __init__(self):
    #构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
        super().__init__()
        #确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
        self.init_ui()
        #初始化用户界面(UI)中的各种部件和设置。用于在创建窗口或部件的时候执行一些初始化操作,以确保UI的正确设置

    def init_ui(self):
        self.resize(400,400)
        #将窗口的初始大小设置为400x400像素
        self.setWindowTitle("登录")
        #将窗口名字设置为“计算器”
        external= QVBoxLayout()
        #创建一个最外层垂直布局对象
        form_layout = QFormLayout()
        #创建一个表单布局器
        edit=QLineEdit()
        #创建一个编辑框
        edit.setPlaceholderText('请输入账号')
        #设置了占位文本为 "请输入账号"
        form_layout.addRow('账号:',edit)
        #表单布局中添加一行。通常需要两个参数:一个标签和一个小部件本代码中,标签是字符串'账号:',小部件由变量edit表示。
        edit2 = QLineEdit()
        # 创建一个编辑框
        edit2.setPlaceholderText('请输入密码')
        # 设置了占位文本为 "请输入密码"
        form_layout.addRow('密码:', edit2)
        # 表单布局中添加一行。通常需要两个参数:一个标签和一个小部件本代码中,标签是字符串'密码:',小部件由变量edit2表示。
        external.addLayout(form_layout)
        # 将form_layout添加到external中
        bin=QPushButton('登录')
        #创建登录按钮
        external.addWidget(bin,alignment=Qt.AlignCenter)
        #将按钮加入到external中,并设置对齐方式
        self.setLayout(external)
        #设置窗口显示为external窗口
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
    app = QApplication(sys.argv)
    #创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
    w=MyWindow()
    #意味着你可以使用变量w来引用和操作这个窗口
    w.show()
    #显示窗口
    app.exec_()
    #用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。

窗口图片
在这里插入图片描述

一、StackedLayout(抽屉布局)

提供了多页面切换的布局但每次只能看到一个页面

import sys
#sys模块提供了与Python解释器和操作系统交互的功能
from PyQt5.QtCore import Qt
#设置窗口的标题栏图标、文本对齐方式、鼠标光标形状、键盘事件处理等等
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout,QGroupBox,QRadioButton,QGridLayout,QLineEdit,  QFormLayout,QApplication,QLabel,QStackedLayout
#QApplication是用于管理应用程序的类,而QWidget是用于创建窗口和用户界面的类,QPushButton按钮类,QVBoxLayout表垂直布局
class Window1(QWidget):
    def __init__(self):
        super(Window1, self).__init__()
        QLabel('新闻联播',self)
        self.setStyleSheet('background-color:green;')
class Window2(QWidget):
    def __init__(self):
        super(Window2, self).__init__()
        QLabel('中国财经',self)
        self.setStyleSheet('background-color:blue;')
class MyWindow(QWidget):
#MyWindow的自定义窗口类,该类继承自PyQt5中的QWidget类
    def __init__(self):
    #构造方法的定义,其中 self 参数表示当前对象的实例。构造方法是在创建一个新的MyWindow类实例时自动调用的
        super().__init__()
        #确保在MyWindow对象初始化时QWidget类的构造方法得到调用,从而正确地初始化窗口对象。
        self.create_stacked_layout()
        #创建抽屉布局器
        self.init_ui()
        #初始化用户界面(UI)中的各种部件和设置。用于在创建窗口或部件的时候执行一些初始化操作,以确保UI的正确设置
    def create_stacked_layout(self):
    #创建抽屉布局函数
        self.stacked_layout=QStackedLayout()
        win1=Window1()
        win2= Window2()
        #创建两个widght
        self.stacked_layout.addWidget(win1)
        self.stacked_layout.addWidget(win2)
        #将创建的两个widget添加到抽屉布局中
    def init_ui(self):
        self.resize(400,400)
        #将窗口的初始大小设置为400x400像素
        external = QVBoxLayout()
        # 创建一个最外层垂直布局对象
        self.setWindowTitle("抽屉布局器")
        #将窗口名字设置为“抽屉布局器”
        widget=QWidget()
        widget.setLayout(self.stacked_layout)
        widget.setStyleSheet('background-color:grey;')
        #设置一个子窗口,并将抽屉布局器添加其中
        btn1=QPushButton('cctv1')
        btn2 = QPushButton('cctv2')
        #创建两个按钮
        btn1.clicked.connect(self.btn1_clicked)
        btn2.clicked.connect(self.btn2_clicked)
        #给按钮添加点击事件
        external.addWidget(widget)
        external.addWidget(btn1)
        external.addWidget(btn2)
        #将控件加入到布局器中
        self.setLayout(external)
        #设置窗口显示为external窗口
    def btn1_clicked(self):
        self.stacked_layout.setCurrentIndex(0)
        #设置抽屉布局器当前索引值,就是可以切换到显示哪个窗口
    def btn2_clicked(self):
        self.stacked_layout.setCurrentIndex(1)
        #设置抽屉布局器当前索引值,就是可以切换到显示哪个窗口
if __name__ =='__main__':
# 检查Python脚本是否正在作为主程序直接运行
    app = QApplication(sys.argv)
    #创建一个APP对象,sys.argv是一个包含命令行参数的列表,用于从命令行接收参数
    w=MyWindow()
    #意味着你可以使用变量w来引用和操作这个窗口
    w.show()
    #显示窗口
    app.exec_()
    #用于启动事件循环。事件循环负责处理用户输入、绘制界面、处理事件、触发信号等等。只有在事件循环运行时,你的应用程序才能够响应用户的操作。

图片如下:
在这里插入图片描述

OK也不知道我写清楚了没有

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值