0

__init__ステートメントで特定の条件が満たされた場合に、ダイアログが開かないようにするにはどうすればよいか疑問に思っています。

次のコードは「self.close()」関数を呼び出そうとしますが、(私は推測していますが) ダイアログがまだイベント ループを開始していないため、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"
4

1 に答える 1

1

ダイアログは、exec_ メソッドが呼び出された場合にのみ実行されます。したがって、exec_ メソッドの条件を確認し、条件が満たされている場合は、QDialog から exec_ を実行する必要があります。

他の方法は、コンストラクター内で例外を発生させ (よくわかりませんが、良い習慣です。他の言語では、通常、コンストラクター内でそのような動作を許可しないでください)、それを外側でキャッチします。例外をキャッチした場合は、単に exec_ メソッドを実行しないでください。

exec_ を実行しない限り、ウィンドウを閉じる必要はないことに注意してください。ダイアログは作成されましたが、まだ表示されていません。

于 2010-03-16T10:32:40.293 に答える