开发者社区> 问答> 正文

PyQt5 如何在多页面中跳转和定位

我设想 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_())

我需要实现这样的功能, 单击按钮时,它可以转换到另一个页面, 其中有另一个按钮,如果我按一下,它将转换回初始页面。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 23:26:34 732 0
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”,它是一个相当专门的类,旨在生成与许多程序用于安装的设置对话框相同外观的对话框。

    回答来源:stackoverflow

    2020-03-24 23:26:43
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
宏光S导航安装教程 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载