どのように(または直後)__init__文の中で、まだしばらくの実行からQDialogを停止するには?

StackOverflow https://stackoverflow.com/questions/2405750

  •  18-09-2019
  •  | 
  •  

質問

私は、私は特定の条件がその__init__文で満たされている場合、開口部からダイアログを停止するについて行くことができる方法疑問に思ってます。

次のコードは、「self.close()」関数を呼び出すようにしようとそれはありませんが、ダイアログはまだそれが近いイベントをトリガしないこと、そのイベントループを開始していないので、?(私は仮定していますか)だから、イベントをトリガすることなく閉鎖および/または開口部からダイアログを停止する別の方法がありますか?

例コード:

from PyQt4 import QtCore, QtGui

class dlg_closeInit(QtGui.QDialog):
    '''
    Close the dialog if a certain condition is met in the __init__ statement
    '''
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.txt_mytext = QtGui.QLineEdit('some text')
        self.btn_accept = QtGui.QPushButton('Accept')

        self.myLayout = QtGui.QVBoxLayout(self)
        self.myLayout.addWidget(self.txt_mytext)
        self.myLayout.addWidget(self.btn_accept)        

        self.setLayout(self.myLayout)
        # Connect the button
        self.connect(self.btn_accept,QtCore.SIGNAL('clicked()'), self.on_accept)
        self.close()

    def on_accept(self):
        # Get the data...
        self.mydata = self.txt_mytext.text()
        self.accept() 

    def get_data(self):
            return self.mydata

    def closeEvent(self, event):
        print 'Closing...'


if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    dialog = dlg_closeInit()
    if dialog.exec_():
        print dialog.get_data()
    else:
        print "Failed"
役に立ちましたか?

解決

ダイアログがexec_メソッドが呼び出された場合にのみ実行されます。あなたはそのためexec_方法で条件をチェックし、それらが満たされている場合、QDialogからexec_実行する必要があります。

他の方法は、(私はわからないけれども、それは良い習慣であり、他の言語にあなたは一般的に、コンストラクタ内のそのような行動を許すべきではありません)コンストラクタの内部で例外を発生することであり、外にそれをキャッチ。あなたは例外をキャッチした場合、単純にexec_方法を実行しないでください。

あなたはexec_を実行しない限り、あなたはウィンドウを閉じる必要がないことを、覚えておいてください。ダイアログが構築され、まだ示されていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top