如何在每页显示测试问题(字符串)??(PyQt/Python)

如何在每页显示测试问题(字符串)??(PyQt/Python),python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我正在创建一个PyQt应用程序,它为用户创建和设置测试。但是,在设置测试问题时,我希望每页查看一个问题。例如,如果用户要开始测试,则会出现一个问题。一旦他们回答了这个问题,然后单击按钮“继续”,这将显示下一页,仅显示第二个问题,依此类推。。。然而,在我的情况下,我不知道每个测试中有多少个问题,所以页数会有所不同。我使用切换布局,因为我宁愿切换布局,而不是打开新窗口,但这意味着我必须为每个问题创建一个类,因为每个测试的问题不同,我不确定如何呈现问题 我不打算复制整个应用程序代码,但将在下面提供一个

我正在创建一个PyQt应用程序,它为用户创建和设置测试。但是,在设置测试问题时,我希望每页查看一个问题。例如,如果用户要开始测试,则会出现一个问题。一旦他们回答了这个问题,然后单击按钮“继续”,这将显示下一页,仅显示第二个问题,依此类推。。。然而,在我的情况下,我不知道每个测试中有多少个问题,所以页数会有所不同。我使用切换布局,因为我宁愿切换布局,而不是打开新窗口,但这意味着我必须为每个问题创建一个类,因为每个测试的问题不同,我不确定如何呈现问题

我不打算复制整个应用程序代码,但将在下面提供一个基本示例:

import sys
from PyQt4 import QtCore, QtGui

class StartTest(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(StartTest, self).__init__(parent)
        self.central_widget = QtGui.QStackedWidget()
        self.setCentralWidget(self.central_widget)
        question1 = Question1(self)
        self.central_widget.addWidget(question1)
        self.central_widget.setCurrentWidget(question1)
        question1.proceed.clicked.connect(self.question2)
    def question2(self):
        question2 = Question2(self)
        self.central_widget.addWidget(question2)
        self.central_widget.setCurrentWidget(question2)

class Question1(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Question1, self).__init__(parent)
        question = QtGui.QLabel('What is 5+5?')
        self.proceed = QtGui.QPushButton("Proceed")
        self.Answer = QtGui.QLineEdit(self)
        layout = QtGui.QFormLayout()
        layout.addRow(question, self.Answer)
        layout2 = QtGui.QVBoxLayout()
        layout2.addLayout(layout)
        layout2.addWidget(self.proceed)
        self.setLayout(layout2)

class Question2(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Question2, self).__init__(parent)
        question = QtGui.QLabel('What is 45+10?')
        self.proceed = QtGui.QPushButton("Proceed")
        self.Answer = QtGui.QLineEdit(self)
        layout = QtGui.QFormLayout()
        layout.addRow(question, self.Answer)
        layout2 = QtGui.QVBoxLayout()
        layout2.addLayout(layout)
        layout2.addWidget(self.proceed)
        self.setLayout(layout2)
#....
if __name__ == '__main__':
    User = ''
    app = QtGui.QApplication([])
    window = StartTest()
    window.showFullScreen()
    app.exec_()

只需要一个可以参数化的
问题
类。对于问题中的示例代码,这与将标签文本作为参数传递一样简单,因为这是唯一不同的地方:

class Question(QtGui.QWidget):
    def __init__(self, label, parent=None):
        super(Question, self).__init__(parent)
        question = QtGui.QLabel(label)
        ...

question1 = Question('What is 5+5?', self)
question2 = Question('What is 45+10?', self)
如果某些问题类型具有不同的结构,则可以为每种类型创建子类:

class ComplexQuestion(Question):
    def __init__(self, label, parent=None):
        super(ComplexQuestion, self).__init__(parent)
        # do additional initialization...
或者,如果您想避免子类化,您可以简单地向启用/禁用某些功能的
Question
类添加方法