pyqt5界面化开发---抽屉布局界面的开发

简介: pyqt5界面化开发---抽屉布局界面的开发

0x01 前言:

抽屉布局(一次只显示一个界面)

需要模块:QStackedLayout

完整代码由三部分组成:封装的主窗口类+封装的抽屉类+程序入口程序

思路:

1、封装窗口类

2、首先有一个抽屉界面

3、然后抽屉界面里面又又多个抽屉(界面)

4、封装多个单独的抽屉类

一、封装的主窗口类

第一步:封装窗口类

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.create_stack_layout()
        self.init_ui()

第二步:添加抽屉界面

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.create_stack_layout()
        self.init_ui()
 
#————————————————————————————————————————————————————————————————
# 下面为新增
 
    def create_stack_layout(self):
        # 创建堆叠(抽屉)布局
        self.stacked_layout = QStackedLayout()
        w1 = Window1()
        w2 = Window2()
 
        # 将2个添加到抽屉布局中
        self.stacked_layout.addWidget(w1)
        self.stacked_layout.addWidget(w2)

第三步:添加抽屉界面的相关布局

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.create_stack_layout()
        self.init_ui()
 
    def create_stack_layout(self):
        # 创建堆叠(抽屉)布局
        self.stacked_layout = QStackedLayout()
        w1 = Window1()
        w2 = Window2()
 
        # 将2个添加到抽屉布局中
        self.stacked_layout.addWidget(w1)
        self.stacked_layout.addWidget(w2)
#————————————————————————————————————————————————————————————————
# 下面为新增
 
    def init_ui(self):
        self.setWindowTitle('form')
        self.setFixedSize(500,400)
        # 先定义最外层的垂直布局(水平布局是QHBoxLayout)
        container = QVBoxLayout()       # 最外层布局器(命名为容器)
        self.setLayout(container)       # 设置显示最外层布局器 (布局器的应用)
 
 
        # 创建要显示的子widget
        widget = QWidget()
        widget.setLayout(self.stacked_layout)
        widget.setStyleSheet("background-color:grey;")
 
 
        # 创建2个按钮,用来点击进行切换抽屉布局中的weight
        btn_press1 = QPushButton("界面1")
        btn_press2 = QPushButton("界面2")
        # 给按钮添加事件 (点击后调用的函数)
        btn_press1.clicked.connect(self.btn_pres1_clicked)
        btn_press2.clicked.connect(self.btn_pres2_clicked)
 
 
        # 将需要显示的控件添加到布局中
        container.addWidget(widget)
        container.addWidget(btn_press1)
        container.addWidget(btn_press2)

第四步:每一个抽屉界面的点击触发

设置布局索引值

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.create_stack_layout()
        self.init_ui()
 
    def create_stack_layout(self):
        self.stacked_layout = QStackedLayout()
        w1 = Window1()
        w2 = Window2()
        self.stacked_layout.addWidget(w1)
        self.stacked_layout.addWidget(w2)
 
    def init_ui(self):
        self.setWindowTitle('form')
        self.setFixedSize(500, 400)
        container = QVBoxLayout()
        self.setLayout(container)
 
        widget = QWidget()
        widget.setLayout(self.stacked_layout)
        widget.setStyleSheet("background-color:grey;")
 
        btn_press1 = QPushButton("界面1")
        btn_press2 = QPushButton("界面2")
        btn_press1.clicked.connect(self.btn_press1_clicked)
        btn_press2.clicked.connect(self.btn_press2_clicked)
 
        container.addWidget(widget)
        container.addWidget(btn_press1)
        container.addWidget(btn_press2)
 
#————————————————————————————————————————————————————————————————
# 下面为新增
 
    def btn_press1(self):
        # 设置抽屉布局当前的索引值(即可切换到指定的weight)
        self.stacked_layout.setCurrentIndex(0)
 
    def btn_press2(self):
        # 设置抽屉布局当前的索引值(即可切换到指定的weight)
        self.stacked_layout.setCurrentIndex(1)

二、封装的抽屉类

class Window1(QWidget):
    def __init__(self):
        super().__init__()
        QLabel("抽屉1内容", self)
        self.setStyleSheet("background-color:green;")
 
 
class Window2(QWidget):
    def __init__(self):
        super().__init__()
        QLabel("抽屉2内容", self)
        self.setStyleSheet("background-color:red;")

三、程序入口程序

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

四、完整代码

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit, QDesktopWidget, QHBoxLayout, QVBoxLayout, QGroupBox, QRadioButton, QGridLayout, QFormLayout, QStackedLayout
 
 
class Window1(QWidget):
    def __init__(self):
        super().__init__()
        QLabel("抽屉1内容", self)
        self.setStyleSheet("background-color:green;")
 
 
class Window2(QWidget):
    def __init__(self):
        super().__init__()
        QLabel("抽屉2内容", self)
        self.setStyleSheet("background-color:red;")
 
 
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.create_stack_layout()
        self.init_ui()
 
    def create_stack_layout(self):
        self.stacked_layout = QStackedLayout()
        w1 = Window1()
        w2 = Window2()
        self.stacked_layout.addWidget(w1)
        self.stacked_layout.addWidget(w2)
 
    def init_ui(self):
        self.setWindowTitle('form')
        self.setFixedSize(500, 400)
        container = QVBoxLayout()
        self.setLayout(container)
 
        widget = QWidget()
        widget.setLayout(self.stacked_layout)
        widget.setStyleSheet("background-color:grey;")
 
        btn_press1 = QPushButton("界面1")
        btn_press2 = QPushButton("界面2")
        btn_press1.clicked.connect(self.btn_press1_clicked)
        btn_press2.clicked.connect(self.btn_press2_clicked)
 
        container.addWidget(widget)
        container.addWidget(btn_press1)
        container.addWidget(btn_press2)
 
    def btn_press1_clicked(self):
        self.stacked_layout.setCurrentIndex(0)
 
    def btn_press2_clicked(self):
        self.stacked_layout.setCurrentIndex(1)
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

相关文章
|
4月前
|
开发框架 前端开发 JavaScript
在Winform界面中使用自定义控件,丰富界面的效果处理
在Winform界面中使用自定义控件,丰富界面的效果处理
|
7月前
|
Python 容器
pyqt5-布局管理入门-信号和槽关联-菜单与工具栏-打包资源文件
pyqt5-布局管理入门-信号和槽关联-菜单与工具栏-打包资源文件
56 0
|
7月前
|
搜索推荐 C#
一个适用于定制个性化界面的WPF UI组件库
一个适用于定制个性化界面的WPF UI组件库
119 0
|
前端开发 C# 开发工具
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
158 0
|
前端开发 C++
qt 如何设计好布局和漂亮的界面。
qt 如何设计好布局和漂亮的界面。
1117 1
qt 如何设计好布局和漂亮的界面。
Qt-网易云音乐界面实现-8 主导航的实现-QtabWidget
哎呀,堕落了,快有小两周没哟更新了,是在是没有动力了,浏览量连三位数都没有,是在是没有写下去的信心。
155 0
Qt-网易云音乐界面实现-8 主导航的实现-QtabWidget
AppleWatch开发入门五——菜单控件的使用
AppleWatch开发入门五——菜单控件的使用
204 0
AppleWatch开发入门五——菜单控件的使用
|
Java 容器
Java开发GUI之CardLayout卡片布局
Java开发GUI之CardLayout卡片布局
206 0
|
程序员 C语言
Qt编写自定义控件50-迷你仪表盘
一、前言 这个控件取名叫迷你仪表盘,是以为该控件可以缩小到很小很小的区域显示,非常适合小面积区域展示仪表数据使用,还可以手动触摸调节进度,是我个人觉得最漂亮小巧的一个控件。初次看到类似的控件是在一个音乐视频编辑软件中,用来展示左通道右通道音量等,有非常多的类似的迷你仪表盘在整个软件系统中,用户可以直接鼠标滑动调节,以最小的占用区域展示最大的信息,漂亮!本控件还拓展了可以左右等分显示,比如中间的值是0,左侧就是低于0的值区域,右侧就是大于0的值区域,进度不一样展示,支持左右旋转角度设置以及各种颜色的设置。
915 0
|
开发工具 C语言
Qt编写自定义控件6-指南针仪表盘
一、前言 指南针仪表盘,主要用来指示东南西北四个方位,双向对称两个指针旋转,其实就是360度打转,功能属于简单型,可能指针的绘制稍微难一点,需要计算多个点构成多边形,本系列控件文章将会连续发100+篇,一方面为了锻炼自己的毅力+坚持力,一方面为了宣传自己,如果各位对完整的源码有兴趣可以私聊,也欢迎...
1172 0