【学习pyqt5记录:界面来回切换】

文章目录

    • 一、概要
    • 二、整体架构流程
    • 三、技术名词解释
    • 四、技术细节
    • 五、小结
    • 六、代码

一、概要

       学习操作界面来回切换有以下作用:

       1. 提高工作效率:通过界面切换,我们可以在不同的应用程序或选项卡之间快速切换,无需频繁使用鼠标,从而节省时间,提高工作效率。
       2. 减少操作难度:对于不熟悉某些应用程序或操作系统的人来说,使用界面切换可以减少在繁琐的菜单中寻找所需选项的时间,从而降低操作难度。
       3. 提高使用舒适度:通过界面切换,我们可以轻松地切换到需要的应用程序或选项卡,避免频繁使用鼠标,从而减少手部疲劳和不适感。

       总之,学习操作界面来回切换的技巧对于提高工作效率、减少操作难度和提高使用舒适度都有帮助。

二、整体架构流程

       这段代码定义了一个名为MainWindow的类,该类继承自QMainWindow。以下是这段代码的整体架构流程:

       1. 在MainWindow的构造函数__init__中,首先调用父类的构造函数,然后创建一个QStackedWidget对象,并将其设置为窗口的中心部件。
       2. 创建了三个QWidget对象,分别表示三个不同的界面。
       3. 创建了四个QPushButton对象,每个按钮都有一个文本标签。
       4. 为每个按钮都连接了一个信号处理器,当按钮被点击时,会调用self.button_clicked(index, stack)方法。
       5. 在第一个界面上添加了四个按钮。
       6. 创建了两个QTextEdit对象和一个返回按钮。
       7. 在第二个和第三个界面上分别添加了一个文本编辑器和返回按钮。
       8. 最后,将这三个界面添加到QStackedWidget中。

       这个程序展示了如何使用PyQt5库创建具有多个界面的应用程序,并通过点击按钮在不同的界面之间进行切换。用户点击不同的按钮,就会切换到相应的界面,点击返回按钮会返回到上一个界面。

三、技术名词解释

       这段代码是在使用PyQt5这个Python库来创建一个具有多个界面的应用程序。以下是具体的解释:

       1. MainWindow的构造函数__init__:这是创建一个类的实例时首先被调用的函数。在这里,它首先调用了父类的__init__函数(即super().__init__()),然后创建了一个QStackedWidget对象,并将其设置为窗口的中心部件(即self.setCentralWidget(self.stack))。
       2. QStackedWidget:这是一个在PyQt5中用来组织和管理多个窗口或界面的部件。这些窗口或界面可以在一个单独的窗口中堆叠在一起,每次只显示一个。
       3. QWidget:这是PyQt5中所有用户界面对象的基类。在这里,它被用来创建三个不同的界面。
       4. QPushButton:这是一个标准的按钮部件,用户可以点击它来触发某些事件。在这里,它被用来创建四个按钮,每个按钮都有一个文本标签。
       5. 信号处理器:在PyQt5中,当某个事件发生时(例如按钮被点击),就会发出一个信号。这个信号可以连接到一个处理器(即一个函数),当信号发出时,这个函数就会被调用。在这里,每个按钮都连接了一个信号处理器,当按钮被点击时,会调用self.button_clicked(index, stack)方法。
       6. QTextEdit:这是一个文本编辑部件,用户可以在其中输入和编辑文本。在这里,它被用来创建两个文本编辑器和一个返回按钮。

       通过这些步骤,代码创建了一个具有三个不同界面的应用程序,每个界面都有自己的按钮和文本编辑器。用户可以通过点击按钮在不同的界面之间切换,并在每个界面上输入和编辑文本。

四、技术细节

       这段代码定义了一个名为MainWindow的类,该类继承自QMainWindowQMainWindow是Qt库中一个顶层的窗口类,通常作为应用程序的主窗口。

       以下是代码的技术细节解释:

       1. __init__方法:这是类的构造函数。在创建MainWindow的实例时,会调用这个方法。在这个方法中,首先调用了父类的__init__方法(通过super().__init__()实现),然后创建了一个QStackedWidget对象,并将其设置为窗口的中心部件(通过self.setCentralWidget(self.stack)实现)。
       2. QStackedWidget:这是一个可以包含多个窗口或界面的部件,但一次只能显示一个。这里创建的stack对象就是用来管理多个窗口或界面的。
       3. 创建两个窗口界面:通过创建两个QWidget对象,分别表示两个不同的界面。
       4. 创建四个按钮:通过创建一个包含四个QPushButton对象的列表,每个按钮都有一个文本标签。
       5. 连接信号处理器:对于每个按钮,都连接了一个信号处理器。当按钮被点击时,会调用self.button_clicked(index, stack)方法。这是通过使用lambda函数和QPushButton.clicked信号实现的。
       6. 添加按钮到界面:将四个按钮添加到第一个窗口界面(即page_buttons)上。
       7. 创建两个文本编辑器和一个返回按钮:通过创建两个QTextEdit对象和一个返回按钮(通过QPushButton实现)。
       8. 添加文本编辑器和返回按钮到界面:将文本编辑器和返回按钮分别添加到第二个和第三个窗口界面(即page_texteditpage_textedit_2)上。
       9. 将两个窗口界面添加到堆栈中:通过调用QStackedWidget.addWidget方法,将两个窗口界面(即page_buttons, page_textedit, page_textedit_2)添加到堆栈中,这样它们就可以被显示和管理了。

       总的来说,这段代码创建了一个具有三个不同界面的应用程序,每个界面都有自己的按钮和文本编辑器。用户可以通过点击按钮在不同的界面之间切换,并在每个界面上输入和编辑文本。

五、小结

       这段代码定义了一个名为MainWindow的类,该类继承自QMainWindow。这个窗口类在初始化时创建了一个QStackedWidget对象,并将其设置为窗口的中心部件。

       代码中创建了两个窗口界面(page_buttonspage_textedit)以及一个额外的窗口界面(page_textedit_2)。

       接下来,代码创建了四个按钮,每个按钮都有一个文本标签。然后,为每个按钮连接了一个信号处理器,当按钮被点击时,会调用self.button_clicked(index, stack)方法。

       然后,将这四个按钮添加到第一个窗口界面(page_buttons)上。

       代码还创建了两个QTextEdit对象和一个返回按钮(通过QPushButton实现)。

       然后,将这两个文本编辑器和返回按钮分别添加到第二个和第三个窗口界面(即page_texteditpage_textedit_2)上。

       最后,将这三个窗口界面添加到堆栈中,以便它们可以被显示和管理。

六、代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023-08-27 15:16
# @Author : Leuanghing Chen
# @Blog : https://blog.csdn.net/weixin_46153372?spm=1010.2135.3001.5421
# @File : 操作界面切换.py
# @Software : PyCharm

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QStackedWidget, QWidget, QVBoxLayout, QTextEdit


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.stack = QStackedWidget()
        self.setCentralWidget(self.stack)

        # 创建两个窗口界面
        page_buttons = QWidget()
        page_textedit = QWidget()
        page_textedit_2 = QWidget()

        # 创建四个按钮
        buttons = [QPushButton(text) for text in ['1、BOM文件管理', '2、创建项目文件夹', 'Button 3', 'Button 4']]
        for button in buttons:
            button.clicked.connect(
                lambda checked, index=buttons.index(button), stack=self.stack: self.button_clicked(index, stack))

        # 在第一个窗口界面上添加按钮
        layout_buttons = QVBoxLayout(page_buttons)
        layout_buttons.addWidget(buttons[0])
        layout_buttons.addWidget(buttons[1])
        layout_buttons.addWidget(buttons[2])
        layout_buttons.addWidget(buttons[3])

        # 创建一个textedit
        self.textedit = QTextEdit()
        self.textedit_2 = QTextEdit()

        # 创建一个返回按钮
        self.back_button = QPushButton('返回')
        self.back_button.clicked.connect(lambda: self.stack.setCurrentIndex(0))  # 切换到按钮界面
        
        # textedit_2界面创建一个返回按钮
        self.back_button_2 = QPushButton('返回2')
        self.back_button_2.clicked.connect(lambda: self.stack.setCurrentIndex(0))  # 切换到按钮界面

        # 在第二个窗口界面上添加textedit和返回按钮
        layout_textedit = QVBoxLayout(page_textedit)
        layout_textedit.addWidget(self.textedit)
        layout_textedit.addWidget(self.back_button)

        # 在第三个窗口界面上添加textedit和返回按钮
        layout_textedit = QVBoxLayout(page_textedit_2)
        layout_textedit.addWidget(self.textedit_2)
        layout_textedit.addWidget(self.back_button_2)

        # 将两个窗口界面添加到堆栈中
        self.stack.addWidget(page_buttons)
        self.stack.addWidget(page_textedit)
        self.stack.addWidget(page_textedit_2)

    def button_clicked(self, index, stack):
        # 当按钮被点击时,根据按钮的索引切换到对应的窗口界面
        if index == 0:
            stack.setCurrentIndex(0)  # 切换到按钮界面
        elif index == 1:
            stack.setCurrentIndex(1)  # 切换到textedit界面
        elif index == 2:
            stack.setCurrentIndex(2)  # 切换到textedit_2界面
        elif index == 3:
            stack.setCurrentIndex(0)  # 切换到textedit界面


if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

你可能感兴趣的:(学习,python,笔记,经验分享,开发语言,qt)