Откройте новое окно после нажатия кнопки Готово на Qwizard: Pyqt5

Я хочу, чтобы кнопка завершения на моем QWizard делала что-то еще, кроме выхода из страницы. Мне нужно подключить его к функции, которая вызывает другое окно. Другими словами, мне нужно просмотреть и добавить функциональность к кнопке Готово на странице Qwizard. Кто-нибудь знает как это сделать. Спасибо

4 ответа

Решение

В основном это то же самое, что вы уже использовали в 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.

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

Я думаю, что вот ответ, как поймать событие нажатия кнопки финиша. Я никогда не работал с pyqt5, но думаю, что сигнал и слот такие же, как в C++.

Когда вы нажимаете кнопку QPizard у вас есть объект QWizard?

Если да:

используйте СИГНАЛ и СЛОТ!

Я не знаю, как это выглядит в Python, но с ++ так:

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

https://wiki.qt.io/Signals_and_Slots_in_PySide

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();
}
Другие вопросы по тегам