Atualizando dinamicamente a janela do Tkinter com base em dados seriais
Eu estou tentando escrever um programa que obtém dados de uma conexão de porta serial e atualiza automaticamente a janela do Tkinter em tempo real com base nesses dados.
Eu tentei criar um thread separado para a janela que periodicamente obtém os dados atuais do thread principal e atualiza a janela, assim:
<code>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() </code>
Correndo me dá este erro:
Exceção na thread Thread-2: Traceback (última chamada mais recente): Arquivo "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", linha 522, em self de __bootstrap_inner. run () Arquivo "analysis.py", linha 52, na execução self.lbl1.pack () Arquivo "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter .py ", linha 1764, em pack_configure + self._options (cnf, kw)) RuntimeError: o encadeamento principal não está no loop principal
Quando eu busco no google esse erro, eu principalmente recebo posts onde as pessoas estão tentando interagir com a janela de dois tópicos diferentes, mas eu não acho que estou fazendo isso. Alguma ideia? Muito obrigado!