Tôi đang cố viết chương trình lấy dữ liệu từ kết nối cổng nối tiếp và tự động cập nhật cửa sổ Tkinter theo thời gian thực dựa trên dữ liệu đó.Tự động cập nhật cửa sổ Tkinter dựa trên dữ liệu nối tiếp
tôi đã cố gắng để tạo ra một chủ đề riêng biệt cho cửa sổ định kỳ được các dữ liệu hiện tại từ các chủ đề chính và cập nhật các cửa sổ, như thế này:
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()
Chạy nó mang lại cho tôi lỗi này:
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
Khi tôi google lỗi này, tôi chủ yếu nhận được bài đăng mà mọi người đang cố gắng tương tác với cửa sổ từ hai chủ đề khác nhau, nhưng tôi không nghĩ rằng tôi đang làm điều đó. Bất kỳ ý tưởng? Cám ơn rất nhiều!
Bạn có thử chạy phần TK không nằm trong chuỗi không? Tức là chỉ cần chạy các công cụ cổng nối tiếp trong một chủ đề và các công cụ TK có thể ở lại trong quá trình chính. Tôi nghi ngờ rằng có thể làm việc ... –
Giống như một chủ đề để nhận dữ liệu cổng nối tiếp và một luồng khác cho vòng lặp phân tích dữ liệu? Tôi sẽ cho một phát bắn. – user1363445