QTextBrowser-Ausgabe auf GUI sekündlich aktualisieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
aliena92
User
Beiträge: 2
Registriert: Dienstag 30. November 2021, 18:41

Guten Abend,

ich habe ein Projekt, bei welchem ich nicht weiter komme, da ich einerseits Neuling bin und andererseits wohl einen Denkfehler habe. Ich hoffe mir kann da jemand helfen...

Ich habe mit dem Qt-Designer eine GUI erstellt und folgendermaßen Strukturiert.

class xyz (QMainWindow):
def __init__(self):
super(xyz, self).__init__()

self.button = self.findChild(QPushButton, "Button_1")

self.button.clicked.connect(self.def1)

def 1(self):
blabla


def TextBrowserAnzeige( ):
TextBrowser.clear()
TextBrowser_Sensor1.append(q.sensor1.get())
time.sleep(1)

app = QApplication(sys.argv)
UIWomdows = UI()
app.exec_()

Die GUI und der Rest des Programms funktioniert soweit ich das möchte. Nun wollte ich mit dem QTextBrowser Sensordaten anzeigen, welche ich jede Sekunde erhalte (String) und auf dem QTextbrowser ausgeben. Der vorherige Wert soll dabei immer gelöscht werden, sodass nur der aktuelle Wert angezeigt wird.

Das Programm ist etwas Umfangreicher und ich habe diverse Threads laufen.


Das Problem:

Wenn ich oben bei der GUI die Zeile: self.TextBrowser_Sensor1.append(q.sensor1.get()) einlese, wird es nur einmal beim Programmstart aktualisiert und bleibt stehen. Das Verstehe ich auch. Ich wollte nun eine eigene Funktion nutzen, welche ich Sekündlich aufrufe (z.B als eigener Thread oder mit dem Scheduler), nach dem Motto:

def TextBrowserAnzeige( ):
TextBrowser.clear() #Alten Wert löschen
TextBrowser_Sensor1.append(q.sensor1.get()) #Neuen Wert anzeigen für ca. 1 Sekunde
time.sleep(1)

Aber ich finde irgendwie nicht die richtige Syntax, um das lauffähig zu bekommen. Irgendwie brauche ich die Verknüpfung zur GUI (__init__).


Bin für jeden Tipp oder Idee dankbar. Danke schonmal an alle!!!
Benutzeravatar
aliena92
User
Beiträge: 2
Registriert: Dienstag 30. November 2021, 18:41

Für alle die das selbe Problem haben, habe ich eine Lösung gefunden (QTimer) -> muss mit pip install qtimer erst installiert werden.

Anschließend importieren:

import PyQt5.QtCore import QTimer

und über einen Timer auslösen:

timer = QTimer(self)
timer.start(1000) # Für eine Sekunde
timer.timeout.connect(lambda: self.TextBrowserAnzeige())

jetzt kann im Gui Menü die Funktion wie ich es oben angelegt habe benutzt werden.

def TextBrowserAnzeige( self):
.self.TextBrowser.clear()
self. TextBrowser_Sensor1.append(q.sensor1.get())
time.sleep(1)


Trotzdem danke an alle fürs lesen :-) Ich hoffe das hilft jemand anderem trotzdem weiter!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Schoen, dass du mit QTimer dein Problem loesen konntest.

Wo du aber daneben liegst, ist bei deiner Wahrnehmung, das muesste mit pip installiert werden. Was du da installiert hast, ist das hier: https://pypi.org/project/qTimer/ - und das hat wirklich nichts mit Qt zu tun. QTimer ist auch aus dem QtCore, und ohne den kannst du gar nichts mit Qt machen. Das ist also immer da.
Antworten