PyQt5中的多个页面[重复]

Posted

技术标签:

【中文标题】PyQt5中的多个页面[重复]【英文标题】:Multiple pages in PyQt5 [duplicate] 【发布时间】:2020-03-08 10:56:16 【问题描述】:

所以我想在 PyQt5 中有多个页面;例如,当我单击一个按钮时,它会转换到另一个页面。这是我的代码。

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, 
    QHBoxLayout, QVBoxLayout, QApplication)

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        Button = QPushButton("OK")


        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(Button)


        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)

        self.setLayout(vbox)    

        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('Buttons')    
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

我希望当我单击按钮时,它会转换到另一个页面,其中有另一个按钮,如果我按下它将转换回初始页面。

【问题讨论】:

【参考方案1】:

您可以为此使用QStackedWidget,例如:

from PyQt5.QtWidgets import (QWidget, QPushButton,
    QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QLabel)

class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()
        self.stacked_widget.currentChanged.connect(self.set_button_state)
        self.next_button.clicked.connect(self.next_page)
        self.prev_button.clicked.connect(self.prev_page)


    def initUI(self):

        self.next_button = QPushButton('Next')
        self.prev_button = QPushButton('Previous')
        self.next_button.setEnabled(False)
        self.prev_button.setEnabled(False)
        self.stacked_widget = QStackedWidget()

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(self.prev_button)
        hbox.addWidget(self.next_button)

        vbox = QVBoxLayout()
        vbox.addWidget(self.stacked_widget)
        vbox.addLayout(hbox)

        self.setLayout(vbox)


    def set_button_state(self, index):
        self.prev_button.setEnabled(index > 0)
        n_pages = len(self.stacked_widget)
        self.next_button.setEnabled( index % n_pages < n_pages - 1)

    def insert_page(self, widget, index=-1):
        self.stacked_widget.insertWidget(index, widget)
        self.set_button_state(self.stacked_widget.currentIndex())

    def next_page(self):
        new_index = self.stacked_widget.currentIndex()+1
        if new_index < len(self.stacked_widget):
            self.stacked_widget.setCurrentIndex(new_index)

    def prev_page(self):
        new_index = self.stacked_widget.currentIndex()-1
        if new_index >= 0:
            self.stacked_widget.setCurrentIndex(new_index)

if __name__ == '__main__':

    app = QApplication([])
    ex = Example()
    for i in range(5):
        ex.insert_page(QLabel(f'This is page i+1'))
    ex.resize(400,300)
    ex.show()
    app.exec()

另一种选择是使用QWizard,这是一个相当专业的类,旨在生成一个与许多程序用于安装的设置对话框具有相同外观和感觉的对话框。

【讨论】:

虽然使用起来有点复杂(但更完整和可扩展),但值得一提的是使用 QWizard 的可能性。 我在文章末尾提到了 QWizard。 对不起,不知怎的我错过了:-( 没问题。一堵代码很容易错过;-) 谢谢。但是如何创建离散的、不同格式的页面。就像单独设计每个页面,并有一个主页可以操作。

以上是关于PyQt5中的多个页面[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 为多个相同类型的小部件重复代码

PyQt5 批量删除 Excel 重复数据,多个文件自定义重复项一键删除...

PyQt5从开环中创建的多个按钮中检索ID和值[重复]

用pyqt5中的表头和每一行构造一个包含多个字典的列表;

如何在pyqt5 QlistWidget中选择多个项目并打印它们[重复]

无法在 PyQt5 中打开多个窗口