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_())

相关文章
|
计算机视觉 容器
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
|
JSON JavaScript 前端开发
Vue项目使用mock数据的几种方式
Vue项目使用mock数据的几种方式
|
18天前
|
人工智能 监控 安全
2025年国内主流数据治理与数据中台产品大全,国内数据治理厂商推荐
在数字化转型加速的背景下,数据治理与数据中台成为企业释放数据价值的关键。本文聚焦国内市场,精选10款代表性产品——包括瓴羊Dataphin、腾讯WeData、华为DataArts Studio、字节Dataleap、网易数帆EasyData、奇点云DataSimba、袋鼠云DTinsight、亚信AISWare DataOS、星环TDS和数澜Datahub,从核心能力、架构特点与适用场景等维度进行解析。这些产品各具优势,文章建议企业结合自身规模、业务特性与技术基础,选择匹配的数据平台,以实现数据驱动的高质量发展。
2025年国内主流数据治理与数据中台产品大全,国内数据治理厂商推荐
|
9月前
|
存储 SQL 开发框架
c# erp源码(简单进销存)
c# erp源码(简单进销存)
454 1
【qt】Tool Box组件
【qt】Tool Box组件
275 0
|
UED
Qt侧边栏的动态展示:隐藏与呈现技术详解
在现代用户界面设计中,侧边栏(Sidebar)是一个常见的组件,它为用户提供了便捷的导航和操作入口。在Qt框架中,实现侧边栏的隐藏与呈现不仅能够提升应用的美观度,还能增强用户体验。本文将详细介绍如何在Qt中实现侧边栏的动态隐藏与呈现,包括技术要点和代码实现。
1165 0
pyqt6 实现弹窗案例
本文介绍了如何实现一系列弹窗效果,包括基础弹窗、消息对话框、输入对话框和清除按钮。通过设置 `self.dialog = Dialog()` 可以轻松实现基础弹窗,而消息对话框则使用 `QMessageBox` 类。输入对话框支持文本、数字和下拉列表输入,清除按钮用于清空输入框内容。每个功能都通过按钮触发相应的槽函数来实现。
837 0
|
前端开发 搜索推荐 API
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
1081 5
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 垂直布局Vertical Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 垂直布局Vertical Layout
1014 2
|
Ubuntu Linux Python
update-alternatives --config python 为什么不能使用
【6月更文挑战第14天】update-alternatives --config python 为什么不能使用
441 1