Como parar um QDialog de executar ainda no comunicado __init__ (ou imediatamente depois)?

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

  •  18-09-2019
  •  | 
  •  

Pergunta

Eu estou querendo saber como eu posso ir sobre a parada de um diálogo de abertura se certas condições forem cumpridas na sua declaração __init__.

Os seguintes tentativas de código para chamar o 'self.close ()' função e ele faz, mas (estou assumindo) desde o diálogo ainda não começou seu ciclo de eventos, que não disparar o evento perto? Então, há uma outra maneira de fechar e / ou interromper o diálogo de abertura sem disparar um evento?

código Exemplo:

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"
Foi útil?

Solução

A caixa de diálogo será executado somente se exec_ método é chamado. Você deve, portanto, verificar as condições no método exec_ e se eles forem cumpridas, executar exec_ de QDialog.

Outro método é gerar uma exceção dentro do construtor (embora eu não tenho certeza, é uma boa prática, em outras línguas você geralmente não deve permitir que tal comportamento dentro construtor) e pegá-lo fora. Se você capturar uma exceção, o método exec_ simplesmente não funcionar.

Lembre-se, que a menos que você executar exec_, você não precisa para fechar a janela. O diálogo é construído, mas não mostrado ainda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top