pyqt5 页面切换 简单例子 (QStackedLayout)

代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout, QPushButton,QStackedLayout
import sys


class FormA(QWidget):
    def __init__(self, parent=None):
        super().__init__()
        self.btnPress = QPushButton("Table AAAA")
        layout = QVBoxLayout()
        self.setLayout(layout)
        layout.addWidget(self.btnPress)
        self.setStyleSheet("background-color:green;")


class FormB(QWidget):
    def __init__(self, parent=None):
        super().__init__()
        self.btnPress = QPushButton("Table BBBB")
        layout = QVBoxLayout()
        self.setLayout(layout)
        layout.addWidget(self.btnPress)
        self.setStyleSheet("background-color:red;")

class TextEditDemo(QWidget):
    def __init__(self, parent=None):
        super(TextEditDemo, self).__init__(parent)
        self.setWindowTitle("QStackedLayout 例子")
        self.resize(300, 270)
        # 创建堆叠布局

        self.btnPress1 = QPushButton("FormA")
        self.btnPress2 = QPushButton("FormB")

        self.form1 = FormA()
        self.form2 = FormB()


        widget = QWidget()
        self.stacked_layout = QStackedLayout()
        widget.setLayout(self.stacked_layout)
        widget.setStyleSheet("background-color:grey;")
        self.stacked_layout.addWidget(self.form1)
        self.stacked_layout.addWidget(self.form2)

        layout = QVBoxLayout()
        layout.addWidget(widget)
        layout.addWidget(self.btnPress1)
        layout.addWidget(self.btnPress2)

        self.setLayout(layout)
        self.btnPress1.clicked.connect(self.btnPress1_Clicked)
        self.btnPress2.clicked.connect(self.btnPress2_Clicked)


    def btnPress1_Clicked(self):
        self.stacked_layout.setCurrentIndex(0)

    def btnPress2_Clicked(self):
        self.stacked_layout.setCurrentIndex(1)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = TextEditDemo()
    win.show()
    sys.exit(app.exec_())

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

### 回答1: 在PyQt5中实现菜单切换页面,可以通过使用QStackedWidget作为主窗口的中心部件来实现页面切换的效果。下面是具体的步骤和代码示例: 1. 导入所需的模块: ```python from PyQt5.QtWidgets import QMainWindow, QAction, QStackedWidget, QWidget, QVBoxLayout ``` 2. 创建主窗口类,并添加菜单和页面切换功能: ```python class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建菜单栏 menu_bar = self.menuBar() # 创建菜单 menu = menu_bar.addMenu("切换页面") # 添加菜单项 action_page1 = QAction("页面1", self) action_page1.triggered.connect(lambda: self.switch_page(0)) menu.addAction(action_page1) action_page2 = QAction("页面2", self) action_page2.triggered.connect(lambda: self.switch_page(1)) menu.addAction(action_page2) # 创建页面堆栈 self.stacked_widget = QStackedWidget() self.setCentralWidget(self.stacked_widget) # 添加页面 self.page1 = QWidget() self.stacked_widget.addWidget(self.page1) self.page2 = QWidget() self.stacked_widget.addWidget(self.page2) # 设置主窗口标题和大小 self.setWindowTitle("菜单切换页面") self.resize(300, 200) def switch_page(self, index): self.stacked_widget.setCurrentIndex(index) ``` 3. 初始化并运行程序: ```python import sys from PyQt5.QtWidgets import QApplication if __name__ == '__main__': app = QApplication(sys.argv) main_window = MainWindow() main_window.show() sys.exit(app.exec_()) ``` 通过以上代码,我们创建了一个简单的主窗口,其中包含一个菜单栏和两个页面。点击菜单项即可实现页面切换页面切换通过设置QStackedWidget的当前索引来实现,索引为0即表示显示第一个页面,索引为1即表示显示第二个页面。 ### 回答2: 在PyQt5中,我们可以使用QMainWindow作为主窗口,并在其上添加菜单栏和多个页面。要实现菜单切换页面的功能,可以通过以下步骤来进行: 1. 导入PyQt5模块: ```python from PyQt5.QtWidgets import QMainWindow, QApplication, QMenu, QAction from PyQt5.QtCore import Qt ``` 2. 创建一个继承自QMainWindow的类,并在其初始化方法中设置初始页面: ```python class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() # 设置初始页面,默认为第一个页面 self.switchPage(0) def initUI(self): # 创建菜单栏 menubar = self.menuBar() # 创建文件菜单 fileMenu = menubar.addMenu('文件') # 添加菜单项 switchPageAction1 = QAction('页面1', self) switchPageAction1.triggered.connect(lambda: self.switchPage(0)) fileMenu.addAction(switchPageAction1) switchPageAction2 = QAction('页面2', self) switchPageAction2.triggered.connect(lambda: self.switchPage(1)) fileMenu.addAction(switchPageAction2) # 创建中心widget,用于存放不同页面 self.centralWidget = QWidget(self) self.setCentralWidget(self.centralWidget) # 创建页面布局 self.layout = QVBoxLayout(self.centralWidget) self.layout.setContentsMargins(0, 0, 0, 0) self.layout.setSpacing(0) # 创建页面 self.page1 = QLabel('页面1') self.page2 = QLabel('页面2') # 将页面添加到布局中 self.layout.addWidget(self.page1) self.layout.addWidget(self.page2) def switchPage(self, index): # 隐藏所有页面 self.page1.hide() self.page2.hide() # 根据页面索引显示对应的页面 if index == 0: self.page1.show() elif index == 1: self.page2.show() ``` 3. 创建QApplication,并实例化主窗口类: ```python app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 通过上述步骤,我们就可以实现一个基于PyQt5的菜单切换页面的应用程序。当点击菜单项时,会在主窗口中切换显示不同的页面。 ### 回答3: 在PyQt5中,我们可以使用QMenuBar和QStackedWidget来实现菜单切换页面的功能。 首先,我们需要创建一个主窗口,并在该窗口中添加一个菜单栏和一个堆叠窗口。菜单栏用于切换不同的页面,而堆叠窗口用于显示不同的页面内容。 接下来,我们可以创建多个页面窗口,并将这些窗口添加到堆叠窗口中。每个页面窗口可以是QWidget的子类,用于显示不同的页面内容。 然后,我们可以在菜单栏中添加菜单,并为每个菜单项添加一个相应的槽函数。在槽函数中,我们可以根据用户选择的菜单项来切换到对应的页面窗口。 在槽函数中,我们可以通过堆叠窗口的setCurrentWidget方法来切换页面。该方法接受一个QWidget参数,用于设置当前显示的页面。 最后,我们可以在主窗口的show方法中设置默认显示的页面,然后运行应用程序,就可以看到菜单切换页面的效果了。 下面是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QMenu, QAction, QStackedWidget, QWidget class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建堆叠窗口 self.stacked_widget = QStackedWidget() self.setCentralWidget(self.stacked_widget) # 创建菜单栏和菜单项 self.menu_bar = self.menuBar() self.file_menu = self.menu_bar.addMenu("文件") # 创建页面窗口 self.page1 = QWidget() self.page2 = QWidget() # 将页面窗口添加到堆叠窗口中 self.stacked_widget.addWidget(self.page1) self.stacked_widget.addWidget(self.page2) # 创建菜单项和对应的槽函数 self.page1_action = QAction("页面1", self) self.page1_action.triggered.connect(self.switch_to_page1) self.file_menu.addAction(self.page1_action) self.page2_action = QAction("页面2", self) self.page2_action.triggered.connect(self.switch_to_page2) self.file_menu.addAction(self.page2_action) # 设置默认显示的页面 self.stacked_widget.setCurrentWidget(self.page1) def switch_to_page1(self): self.stacked_widget.setCurrentWidget(self.page1) def switch_to_page2(self): self.stacked_widget.setCurrentWidget(self.page2) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 上述代码创建了一个具有两个页面的主窗口,通过菜单栏切换页面。您可以根据需要添加更多的页面和菜单项来实现更多功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值