__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