Cómo detener un QDialog de ejecutar al mismo tiempo en la declaración __init__ (o inmediatamente después)?

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

  •  18-09-2019
  •  | 
  •  

Pregunta

Me pregunto cómo puedo ir sobre la detención de un diálogo de apertura si se cumplen ciertas condiciones en su declaración __init__.

El siguiente código intenta llamar a la 'self.close ()' función y lo hace, pero (estoy suponiendo) desde el cuadro de diálogo aún no ha iniciado su ciclo de eventos, que no activa el evento de cierre? Entonces, ¿hay otra manera de cerrar y / o detener el diálogo de apertura sin desencadenar un evento?

código de ejemplo:

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

Solución

El diálogo se llevará a cabo sólo si se llama exec_ método. Por lo tanto, usted debe comprobar las condiciones en el método exec_ y si se cumplen, ejecute exec_ de QDialog.

Otro método consiste en lanzar una excepción dentro del constructor (aunque no estoy seguro, es una buena práctica; en otros idiomas por lo general, no debe permitir que tal comportamiento dentro constructor) y ponerse fuera. Si se captura una excepción, simplemente no se ejecutan exec_ método.

Recuerde que a menos que se ejecuta exec_, no es necesario para cerrar la ventana. El cuadro de diálogo se construye, pero no se muestra todavía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top