2014-07-28 6 views
5

Ecco un esempio qui sotto:Come posso eseguire più codice dopo aver chiuso una finestra PyQt?

if __name__ == '__main__': 
    import sys 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 
    print "you just closed the pyqt window!!! you are awesome!!!" 

L'istruzione print di cui sopra non sembrano avere eseguito mentre la finestra è aperta o dopo la chiusura della finestra. Voglio che venga stampato dopo aver chiuso la finestra.

+0

Suppongo che ci sia il codice per mettere effettivamente qualcosa sullo schermo? – mdurant

+0

C'è più codice. Ed effettivamente stampa la frase dopo aver aperto la finestra, ma voglio che stampi la dichiarazione solo dopo che l'utente chiude la finestra. –

risposta

8

lo faccio ridefinendo il metodo closeEvent, in questo modo:

class YourMainWindow(QtGui.QMainWindow): 

    (...) 

    def closeEvent(self, *args, **kwargs): 
     super(QtGui.QMainWindow, self).closeEvent(*args, **kwargs) 
     print "you just closed the pyqt window!!! you are awesome!!!" 

Mi auguro che aiuta

+0

Penso che questo sia vicino a quello di cui ho bisogno. Sembra che tu stia chiamando closeEvent all'interno della definizione di closeEvent. Non devo capire cosa sta succedendo qui. Puoi indirizzarmi ad altri esempi usando super e closeEvent? –

+0

Questo è esattamente quello che sto facendo. Io ridefinisco 'closeEvent' per includere la tua dichiarazione di stampa ma includo anche l'originale' closeEvent' perché non voglio perdere le cose che fa in origine. Documentazione: https://docs.python.org/2/library/functions.html#super Bella spiegazione qui: http://stackoverflow.com/questions/576169/understanding-python-super-and-init-methods – Federico

+0

Grazie per l'aiuto. Controllerò quei link. –

1

I seguenti lavori correttamente per me (la dichiarazione stampa finale viene eseguita):

from PyQt4 import QtGui, QtCore 
app = QtGui.QApplication([]) 
win = QtGui.QMainWindow() 
win.show() 
if __name__ == '__main__': 
    import sys 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 
    print "you just closed the pyqt window!!! you are awesome!!!" 
+0

Ciò stampa la dichiarazione dopo aver aperto la finestra, ma voglio che stampi l'istruzione solo dopo che l'utente ha chiuso la finestra. –

+0

Estrarre la seconda istruzione 'if' per forzare l'esecuzione del ciclo degli eventi. – Luke

+0

Grazie, farò un tentativo. –

1

Di solito la maggior parte delle applicazioni PyQt ha linee simili in:

app = QApplication(sys.argv) 
myclass = MyClass() 
myclass.show() 
sys.exit(app.exec_()) 

Che cosa si può fare è definire una funzione che fa tutto quanto sopra, e poi fare quello che vuoi dopo la chiamata a app.exec_():

def appExec(): 
    app = QApplication(sys.argv) 
    # and so on until we reach: 
    app.exec_() 
    print("my message...") 
    # other work... 

Tutto quello che si potrebbe avere in principale è:

sys.exit(appExec())