Come fermare un QDialog dall'esecuzione mentre ancora nel comunicato __init__ (o subito dopo)?

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

  •  18-09-2019
  •  | 
  •  

Domanda

Mi chiedo come posso fare per fermare un dialogo apertura se vengono soddisfatte determinate condizioni nella sua dichiarazione __init__.

Il seguente codice tenta di chiamare il 'self.close ()' la funzione e lo fa, ma (sto supponendo) dal momento che la finestra di dialogo non ha ancora iniziato il ciclo di eventi, che non fa scattare l'evento close? Quindi c'è un altro modo per chiudere e / o interrompere la finestra di apertura senza innescare un evento?

Esempio di codice:

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"
È stato utile?

Soluzione

La finestra di dialogo verrà eseguito solo se exec_ metodo viene chiamato. Controllare quindi le condizioni nel metodo exec_ e se sono soddisfatte, eseguire exec_ da QDialog.

Altro metodo è quello di sollevare un'eccezione all'interno del costruttore (anche se non sono sicuro, è una buona pratica, in altre lingue che in genere non dovrebbe consentire tale comportamento all'interno costruttore) e prendere fuori. Se si cattura un'eccezione, semplicemente non correre exec_ metodo.

Ricordate, che se non si esegue exec_, non è necessario per chiudere la finestra. La finestra di dialogo è costruito, ma non ancora mostrato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top