仅在第一页将 QWizard.NextButton 连接到自定义方法

Connect QWizard.NextButton to custom method only on the first page

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

我想让第一页的Next按钮先执行一个名为execute_venv_create()的方法,然后调用下一页。在接下来的页面中,Next 按钮应该像往常一样工作。

为此,我将 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 按钮按我的预期工作,它调用该方法并切换到下一页。但是,在第二页 InstallPackages() 上,如果我单击 下一步

,GUI 会崩溃

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

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

你的方法是正确的,但你必须使用QWizard object associated with the page that can be obtained through the 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)