직렬 포트 연결에서 데이터를 가져 와서 해당 데이터를 기반으로 실시간으로 Tkinter 창을 자동으로 업데이트하는 프로그램을 작성하려고합니다.직렬 데이터를 기반으로 Tkinter 창을 동적으로 업데이트
: 그것은 나를이 오류를 제공 실행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
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()
:
나는 정기적으로 다음과 같이 창을 메인 스레드에서 현재 데이터를 가져 와서 업데이트 창에 대한 별도의 스레드를 만들려고이 오류를 Google로 검색 할 때 대부분 사람들이 두 개의 다른 스레드에서 창과 상호 작용하려고하는 게시물을 가져 오지만 실제로 그렇게하지는 않는다고 생각합니다. 어떤 아이디어? 정말 고마워!
쓰레드가 아닌 TK 파트를 실행 해 보셨습니까? 즉, 직렬 포트 항목을 스레드에서 실행하고 TK 항목은 주 프로세스에 머물 수 있습니다. 나는 그것이 작동 할지도 모른다라고 생각한다. –
직렬 포트 데이터를 얻기위한 하나의 스레드와 데이터 분석 루프를위한 다른 스레드를 좋아 하는가? 나는 그 기회를 줄 것이다. – user1363445