1

我有一个三页向导。第一页是BasicSettings(),第二页是InstallPackages(),最后一页是Summary()

我希望第一页上的Nextexecute_venv_create()按钮首先执行一个名为的方法,然后调用下一页。在接下来的页面中,“下一步”按钮应该像往常一样运行。

为此,我将Next按钮连接成execute_venv_create()这样:

class VenvWizard(QWizard):
    """The wizard class."""
    def __init__(self):
        super().__init__()
        # ...

class BasicSettings(QWizardPage):
    """This is the first page."""
    def __init__(self):
        super().__init__()
        # ...

    def initializePage(self):
        next_button = self.wizard().button(QWizard.NextButton)
        next_button.clicked.connect(self.execute_venv_create)

    def execute_venv_create(self):
        # do something, then display an info message
        QMessageBox.information(self, "Done", "message text")

问题当然是每次单击Next时都会调用该方法,因此我尝试断开按钮并以这种方式将其重新连接到该QWizard.next()方法:

class InstallPackages(QWizardPage):
    """This is the second page."""
    def __init__(self):
        super().__init__()
        # ...

    def initializePage(self):
        next_button = self.wizard().button(QWizard.NextButton)
        next_button.disconnect()
        next_button.clicked.connect(QWizard.next)

在第一页上,Next按钮按我的预期工作,它调用方法并切换到下一页。但是,在第二页上,如果我单击NextInstallPackages(),GUI 会崩溃。


这是将QWizard按钮连接到自定义方法的正确方法还是无法使用向导按钮QWizardPages

如何将 连接QWizard.NextButton到特定的自定义方法QWizardPage并使按钮在以下页面上正常运行?

4

1 回答 1

2

你的方法是正确的但是你必须使用与可以通过该方法获得的页面关联的QWizard对象:wizard()

def execute_venv_create(self):
    # do something, then display an info message
    QMessageBox.information(self, "Done", "message text")
    next_button = self.wizard().button(QWizard.NextButton)
    next_button.disconnect()
    next_button.clicked.connect(self.wizard().next)
于 2019-08-05T14:55:04.193 回答