Estoy intentando escribir un programa que obtiene datos de una conexión de puerto serie y actualiza automáticamente la ventana de Tkinter en tiempo real en función de esos datos.Actualización dinámica de la ventana de Tkinter basada en datos en serie
Me trataron de crear un hilo separado para la ventana que recibe periódicamente los datos actuales desde el hilo principal y actualiza la ventana, como esto:
serialdata = []
data = True
class SensorThread(threading.Thread):
def run(self):
serial = serial.Serial('dev/tty.usbmodem1d11', 9600)
try:
while True:
serialdata.append(serial.readline())
except KeyboardInterrupt:
serial.close()
exit()
class GuiThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.root = Tk()
self.lbl = Label(self.root, text="")
def run(self):
self.lbl(pack)
self.lbl.after(1000, self.updateGUI)
self.root.mainloop()
def updateGUI(self):
msg = "Data is True" if data else "Data is False"
self.lbl["text"] = msg
self.root.update()
self.lbl.after(1000, self.updateGUI)
if __name == "__main__":
SensorThread().start()
GuiThread().start()
try:
while True:
# A bunch of analysis that sets either data = True or data = False based on serialdata
except KeyboardInterrupt:
exit()
Correr me da este error:
Exception in thread Thread-2: Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner self.run() File "analysis.py", line 52, in run self.lbl1.pack() File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 1764, in pack_configure + self._options(cnf, kw)) RuntimeError: main thread is not in main loop
Cuando googleo este error, la mayoría de las veces recibo publicaciones en las que las personas intentan interactuar con la ventana desde dos hilos diferentes, pero no creo que esté haciendo eso. ¿Algunas ideas? ¡Muchas gracias!
¿Intentó ejecutar la parte TK no en un hilo? Simplemente ejecuto las cosas del puerto serie en un hilo y las cosas TK pueden permanecer en el proceso principal. Sospecho que podría funcionar ... –
¿Como un hilo para obtener los datos del puerto serie y otro hilo para el ciclo de análisis de datos? Voy a dar una oportunidad. – user1363445