7
votes

Existe-t-il un moyen d'appeler une fonction juste avant la fin d'une application PYQT?

Je collectionne des statistiques d'utilisation pour mes applications qui incluent la durée de chaque session. Cependant, je ne peux pas sembler être capable de sauvegarder ces informations car aucun des signaux que j'ai essayé encore ne réussisse à appeler ma fonction Report_Session.

Ce sont les signaux que j'ai déjà essayés:

  1. LastWindowElled ()
  2. Abouttoquit ()
  3. détruit ()

    Soit ces signaux ne sont jamais émis ou que l'application ne vit pas assez longtemps après avoir rien d'autre. Voici mon principal: xxx


0 commentaires

4 Réponses :


5
votes

mettre le code entre app.exec _ et sys.exit : xxx


1 commentaires

Êtes-vous sûr que cela fonctionne? a travaillé sur ma machine



5
votes

S'assurer qu'une fonction Python est appelée à la résiliation du processus, en général (avec ou sans qt impliquée ;-), vous pouvez utiliser le Atexit Module de la bibliothèque Python standard:

import atexit

def whatever(): ...

atexit.register(whatever)


1 commentaires

Je n'ai pas essayé cela, même si j'étais au courant du module Atexit. J'ai fini par préférer réimplément la méthode de la quai de la qualité.



1
votes

trouvé Cette réponse qui implique une surcharge de surcharge de rue ().

Cela a fonctionné parfaitement pour moi.


0 commentaires

8
votes

La méthode que Mark Byers Publié sera exécutée après la fermeture du widget principal, ce qui signifie que ses contrôles ne seront plus disponibles.

Si vous devez travailler avec toutes les valeurs des contrôles de votre formulaire, vous souhaitez capturer l'événement proche et effectuer votre travail: P>

class MainWidget(QtGui.QWidget):

    #...

    def closeEvent(self, event):
        print "closing PyQtTest"
        self.SaveSettings()
        # report_session()


0 commentaires