Seite 1 von 1

Label friert ein

Verfasst: 9. Juni 2012 16:42
von tron46
Hallo,

wir haben mithilfe von pyqt4 eine ui-File erstellt, auf dem sich unter anderem auch ein Label befindet (erstellt mit QLabel)"
Nun haben wir ein Pythonprogramm, in dem wir das ui-File laden, um darauf Daten zu visualisieren.
In besagtem Label wollen wir eine Anzeige für Gradzahlen machen dies machen wir in der Funktion:
wobei self._widget das UI-File ist

Code: Alles auswählen

def setLabel(self, d):
    str = "Degree: %s"%d
    self._widget.degree_label.setText(str)
die Gradzahl wird etwa alle 0.1 Sekunden neu gesetzt

das Problem:
nach einer gewissen (unregelmäßigen) Zeit (5 - 45 Minuten) friert das Label ein
und die Anzeige verändert sich nicht mehr

woran könnte dies liegen?

Vielen Dank im Voraus =)

Re: Label friert ein

Verfasst: 10. Juni 2012 08:36
von franzf
10x pro Sekunde sollte kein Problem sein. Wenn sich das Label tatsächlich nicht mehr ansprechen lässt, kommen keine Events mehr durch, dann sollte sich aber die ganze Anwendung aufgehängt haben.
Bist du dir sicher, dass es nicht an deinem Daten-Provider liegt? Liefert der tatsächlich noch Daten?
Was gibt die Anwendug auf die Konsole aus?
Am besten wäre es, du würdest ein komplettes, lauffähiges Beispiel (in einem .zip) hochladen (über die Forenfunktion "Dateianhang hochladen"), das das von dir angesprochene Verhalten zeigt.

Re: Label friert ein

Verfasst: 10. Juni 2012 10:26
von tron46
Das Problem lag darin dass die updates aus einen anderen Thread kamen und es deswegen zu Schwierigkeiten kam
jetzt haben wir das update des Labels ein einen QTimer verschoben, was nach den ersten Tests sehr gut zu funktionieren scheint

Falls jemand in das Forum kommt und ein ähnliches Problem hat:

Code: Alles auswählen

# In der Init-Methode einen QTimer erstellen:
        # Der Text, der in das Label geschrieben werden soll:
        global degree_text
        degree_text = "no data"
        # Einen Timer erstellen, der automatisch alle 0.1 sekunden das Label updated:
        self.timer = QTimer(self)
        self.connect(self.timer, SIGNAL('timeout()'), self.update_label)
        # den Timer mit der Verzögerung von 100 ms starten
        self.timer.start(100)
(...)
    # Die Labelbeschriftung setzen
    def setLabel(self, d):
        global degree_text
        degree_text = "Degree: %s"%d

    # Die Labelbeschriftung in das Label schreiben
    def update_label(self):
        self._widget.degree_label.setText(degree_text)
Vielen Dank für die Mühe =)