2017-09-12 23 views

答えて

2

これはPyQtで既に使われているものとほとんど同じです。違いは、Finishボタンのエンティティを見つける方法です。ここでは実施例である:特にFinish]ボタンをポイントするようにself.button(QtWidgets.QWizard.FinishButton):私は、このコマンドを使用する方法

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_()) 

注意してください。残りの部分は、必要なものを行うための独自の方法を構築するだけです。私の例では、私はdef _doSomething(self)に接続し、非常に単純なQMessageBoxを起動しました。

+0

ありがとうございました。これは動作するはずです –

+0

高、これはMacOSXとWindowsの両方で完全に動作します。しかし、ウィザードがQMessageBoxの代わりにQWidgetを呼び出すと、そのフォームはMacOSXに表示されたままになりますが、Windowsではすぐに消えます。あなたはそれがなぜあるのか知っていますか? –

0

あなたのQPushbuttonをあなたが押したときあなたはQWizardオブジェクトを持っていますか?

はい:

使用SIGNALとSLOT!

それはPythonでどのように見えるか、私は知らないが、このようなC++:;

https://wiki.qt.io/Signals_and_Slots_in_PySide

は(my_buttonというを接続し、SIGNALは(、your_qwizard_object、SLOT(your_qwizard_slot())))(クリック

+0

私はQtWidgetオブジェクトを開くために必要です。さらに、この機能を実行してウィザードを閉じるには、結論ページに「完了」ボタンが組み込まれている必要があります。 –

+0

ありがとうございました。私はPythonでこれを理解する必要があります。 C++の知識はほとんどありません。言い換えれば、デフォルトの終了ボタン機能を乗り越えるためにシグナルスロットを使用する必要がありますか? –

+0

私ははいと思います。 https://wiki.qt.io/Signals_and_Slots_in_PySide これを読んでください:) – Taz742

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(); 
} 
+0

これはメインウィジェットでウィザードページを呼び出していますか?どのように反対ですか?私は独立して動作するメインウィンドウ形式を持っています。どのようにそれがqwizardから呼び出されたときにそれが表示されますが、それからボタンをクリックするとクラッシュします。 –

関連する問題