在Qwizard:Pyqt5上单击完成按钮后打开一个新窗口

时间:2017-09-12 10:30:23

标签: qt pyqt5 qwizard

我希望我的QWizard上的完成按钮除了退出页面之外还做其他事情。我需要将它连接到调用另一个窗口的函数。换句话说,我需要查看并向Qwizard页面的Finish按钮添加功能。有谁知道如何做到这一点。感谢

4 个答案:

答案 0 :(得分:2)

它与你在PyQt中已经习惯做的大致相同。不同之处在于如何查找“完成”按钮实体。这是一个有效的例子:

import sys
from PyQt5 import QtWidgets, QtCore, QtGui

class IntroPage(QtWidgets.QWizardPage):
    def __init__(self, parent=None):
        super(IntroPage, self).__init__(parent)

class LastPage(QtWidgets.QWizardPage):
    def __init__(self, parent=None):
        super(LastPage, self).__init__(parent)

class MyWizard(QtWidgets.QWizard):
    def __init__(self, parent=None):
        super(MyWizard, self).__init__(parent)

        self.introPage = IntroPage()
        self.lastPage = LastPage()
        self.setPage(0, self.introPage)
        self.setPage(1, self.lastPage)

        # This is the code you need
        self.button(QtWidgets.QWizard.FinishButton).clicked.connect(self._doSomething)

    def _doSomething(self):
        msgBox = QtWidgets.QMessageBox()
        msgBox.setText("Yep, its connected.")
        msgBox.exec()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main = MyWizard()
    main.show()
    sys.exit(app.exec_())

注意我是如何使用此命令的:self.button(QtWidgets.QWizard.FinishButton)专门指向完成按钮。其余的只是构建自己的方法来做任何你需要的事情。在我的示例中,我连接到def _doSomething(self)并启动了一个非常简单的QMessageBox。

答案 1 :(得分:1)

https://forum.qt.io/topic/44065/how-to-catch-finish-button-pressed-signal-in-qwizard/6

我认为这里是如何抓住完成按钮按下事件。 我从未使用pyqt5,但我认为信号和插槽与c ++相同。

答案 2 :(得分:0)

当您按下QPush按钮时,您有QWizard对象吗?

如果是的话:

使用SIGNAL和SLOT!

我不知道它在Python中是怎么样的,但c ++是这样的:

connect(my_button,SIGNAL(clicked(),your_qwizard_object,SLOT(your_qwizard_slot()));

https://wiki.qt.io/Signals_and_Slots_in_PySide

答案 3 :(得分:0)

void MainWindow::on_btnCreateWizard_clicked() { 
    MyWizardForm* dlg = new MyWizardForm(this); 
    connect(dlg, SIGNAL(_finished()), this, SLOT(slot_show_me()));
    this->hide();
    dlg.exec(); 
} 

void MainWindow::slot_show_me() { 
    this->show();
} 

void MyWizardForm::on_btnClose_Clicked() { 
    emit _finished();
    this->reject();
}