pyqt5 页面切换

整体切换

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QStackedLayout, QLabel,
                             QHBoxLayout, QGridLayout, QPushButton)
from PyQt5.QtGui import QPalette, QColor


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.create_ui()

        self.setGeometry(200, 100, 800, 600)
        self.setWindowTitle('图书管理系统')
        self.show()

    def create_ui(self):
        self.stacked = QStackedLayout(self)

        one = One()
        two = Two()
        three = Three()

        one.btn.clicked.connect(self.next_action)
        two.btn2.clicked.connect(self.next_action)
        two.btn1.clicked.connect(self.pre_action)
        three.btn.clicked.connect(self.pre_action)

        self.stacked.addWidget(one)
        self.stacked.addWidget(two)
        self.stacked.addWidget(three)

    def next_action(self):
        index = self.stacked.currentIndex()
        #
        self.stacked.setCurrentIndex(index + 1)

    def pre_action(self):
        index = self.stacked.currentIndex()
        #
        self.stacked.setCurrentIndex(index - 1)


class One(QWidget):
    def __init__(self):
        super(One, self).__init__()
        self.create_ui()

    def create_ui(self):
        label = QLabel('页面一', self)
        label.move(50, 30)

        self.btn = QPushButton('下一页', self)
        self.btn.move(300, 300)


class Two(QWidget):
    def __init__(self):
        super(Two, self).__init__()
        self.create_ui()

    def create_ui(self):
        label = QLabel('第二个页面', self)
        label.move(50, 60)

        self.btn2 = QPushButton('下一页', self)
        self.btn2.move(300, 300)
        # btn1.clicked.connect(self.btnAction)

        self.btn1 = QPushButton('上一页', self)
        self.btn1.move(100, 300)


class Three(QWidget):
    def __init__(self):
        super(Three, self).__init__()
        self.create_ui()

    def create_ui(self):
        label = QLabel('第三个页面', self)
        label.move(50, 100)

        self.btn = QPushButton('上一页', self)
        self.btn.move(100, 300)


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

部分切换

"""
Date:2021/4/21 14:49
Author :四翼妄为
"""
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel,
                             QHBoxLayout, QGridLayout, QPushButton, QVBoxLayout, QListWidget, QStackedLayout)
from PyQt5.QtGui import QPalette, QColor
from PyQt5 import QtWidgets


class One(QWidget):
    def __init__(self):
        super(One, self).__init__()
        self.create_ui()

    def create_ui(self):
        box = QHBoxLayout(self)

        left_box = QVBoxLayout()
        list_v = QListWidget(self)  # 列表框控件用来加载并显示多个列表项
        list_v.addItems(['释义', '例句'])  # 添加文字选项
        list_v.setCurrentRow(0)  # 设置默认选中
        list_v.currentItemChanged.connect(self.item_change)  # 关联切换事件
        left_box.addWidget(list_v)

        self.right_box = QStackedLayout()
        l1 = QLabel('释义的界面', self)
        l2 = QLabel('例句的界面', self)
        self.right_box.addWidget(l1)
        self.right_box.addWidget(l2)

        box.addLayout(left_box, 1)
        box.addLayout(self.right_box, 3)

    def item_change(self, value: QtWidgets.QListWidgetItem):
        print('改变', value.text())
        if value.text() == '释义':
            self.right_box.setCurrentIndex(0)
        else:
            self.right_box.setCurrentIndex(1)


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.create_ui()

        self.setGeometry(200, 100, 800, 600)
        self.setWindowTitle('图书管理系统')
        self.show()

    def btn1_action(self):
        self.bottom_box.setCurrentIndex(0)

    def btn2_action(self):
        self.bottom_box.setCurrentIndex(1)

    def btn3_action(self):
        self.bottom_box.setCurrentIndex(2)

    def create_ui(self):
        box = QVBoxLayout(self)  # 整体的盒子必关联self呀,不然后边没法玩了

        # 1.顶部视图
        top_box = QHBoxLayout()
        btn1 = QPushButton('页面一', self)
        btn2 = QPushButton('页面二', self)
        btn3 = QPushButton('页面三', self)

        top_box.addWidget(btn1)
        top_box.addWidget(btn2)
        top_box.addWidget(btn3)

        btn1.clicked.connect(self.btn1_action)
        btn2.clicked.connect(self.btn2_action)
        btn3.clicked.connect(self.btn3_action)

        # 底部视图
        self.bottom_box = QStackedLayout()
        page1 = One()
        page2 = QLabel('页面二', self)
        page3 = QLabel('页面三', self)

        self.bottom_box.addWidget(page1)
        self.bottom_box.addWidget(page2)
        self.bottom_box.addWidget(page3)

        box.addLayout(top_box)
        box.addLayout(self.bottom_box)


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

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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、付费专栏及课程。

余额充值