Hi alle,
ich erstelle gerade mit Python3 eine Anwendung, die unter anderem auf
Befehle per UART reagieren soll, aber auch ein Tkinter-GUI hat.
Recht schnell bin ich bei thread.Threading gelandet. Den Thread zu
starten klappt nun auch.
Nun ist aber meine Frage: Wie bekomme ich die Daten Flags Events /
Wasauchimmer wieder in den GUI-Root-Thread?
Bei einer Konsolenanwendung könnte ich ja einfach globale Variablen
setzen und Pollen (wie beim Interrupt aufm µC), aber wenn der GUI-Loop
erst mal läuft, komme ich ja an nichts dran.
Ich müsste also irgendein Event auslösen können, auf dass dann im
Hauptthread reagiert werden kann (Ähnlich zu den binds bei Button
press/release).
genau hier hänge ich nun. Wie wird das üblicherweise realisiert?
Mein Thread schaut so aus:
1 | class SerialReceiveThread(threading.Thread):
|
2 | def __init__(self):
|
3 | threading.Thread.__init__(self)
|
4 | def run(self):
|
5 | print ("Thread gestartet ")
|
6 | pressMuteMicro()
|
7 | while (True):
|
8 | print("Schleife gestartet ")
|
9 | if (SerialPort.inWaiting()>0):
|
10 | line = SerialPort.readline()
|
11 | if line == "Schaff was, faul Sau!":
|
12 | print ("Receive Pwr ON ")
|
13 | BildschirmAn()
|
14 | elif line == "Mach Feierowend!":
|
15 | print ("Receive Pwr OFF ")
|
16 | BildschirmAus()
|
pressMuteMicro(), BildschirmAn() und BildschirmAus sind Funktionen aus
dem Hauptthread. Ich hatte ja insgeheim gehofft, dass es bei Python so
einfach geht, aber tut es natürlich nicht.
Der Thread wird wie folgt gestartet:
1 | ReadThread = SerialReceiveThread()
|
2 | ReadThread.start()
|
3 | guiRoot.mainloop()
|
So langsam raucht mir der Kopf, ich würde mich über ein paar Stichworte
sehr freuen.
Beste Grüße
Jens