Funktion ausführen, sobald Fenster geladen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
krebsi83
User
Beiträge: 7
Registriert: Montag 12. Juli 2010, 12:28

Ich habe folgendes Problem:
ich möchte eine Funktion starten, sobald das Hauptfenster (in diesem Fall ein QDialog) angezeigt wird.

folgendes habe ich probiert

Code: Alles auswählen

 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
import time
from PyQt4 import QtCore, QtGui
from gui import Dialog


if __name__ == "__main__":
     import sys
     app = QtGui.QApplication(sys.argv)
     ui = Dialog()
     ui.show()
     ui.aufzeichnung() # <---- diese Funktion soll ausgeführt werden, sobald das Fenster angezeigt wird
     sys.exit(app.exec_())
ich habe in die Funktion "aufzeichnung" zum Test ein

Code: Alles auswählen

time.sleep(5)
geschrieben.... so sehe ich, dass die Funktion schon ausgeführt wird, bevor das Fenster angezeigt wird....

Wo bzw. wie muss ich meine Funktion starten, dass sie erst ausgeführt wird, wenn das Fenster angezeigt wird?

LG krebsi83
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Hi,

mir fällt da dieser Thread zu ein.
Wie in dem Thread von Lunar erklärt wird, wird ein

Code: Alles auswählen

QTimer.singleShot(0, deineFunktion)

unmittelbar nach dem app.exec_() ausgeführt. Was in deinem Fall nach dem Anzeigen deines Fensters wäre.
lunar

@ichisich: Das ist nicht dasselbe. Eine solche Funktion wird ausgeführt, sobald die Ereignisschleife läuft. Sie kann also auch vor dem Anzeigen des Fensters ausgeführt werden, je nachdem in welcher Reihenfolge Ereignisse in der Ereignisschleife landen.
krebsi83
User
Beiträge: 7
Registriert: Montag 12. Juli 2010, 12:28

@ichisich: hab es gerade probiert... lunar hat recht. das funktioniert leider nicht
@lunar hast du einen kleinen Beispielcode für mich?
lunar

Code: Alles auswählen

class Dialog(QDialog):
    def showEvent(self, evt):
        print 'Fenster wird angezeigt'
So schwer ist das doch nicht ...
krebsi83
User
Beiträge: 7
Registriert: Montag 12. Juli 2010, 12:28

geht leider nicht wirklich.... so hab ich es getestet:

Code: Alles auswählen

    def showEvent(self, evt):
        print 'Fenster wird angezeigt'
        time.sleep(2)
        self.label.setText("Text1")
        time.sleep(2)
        self.label.setText("Text2")
Das Fenster wird aber erst angezeigt, wenn der Label-Text = "Text2" ist also quasi nach den 4 Sekunden Wartezeit....
lunar

@krebsi83: Lies doch bitte die Dokumentation. Wenn das "showEvent()" durch den Aufruf von ".show()" ausgelöst wird, dann geschieht das unmittelbar vor dem Erscheinen des Fensters. Wenn Du dann vier Sekunden darin wartest, wird das Fenster eben erst nach vier Sekunden angezeigt ...
Antworten