シリアルポート接続からデータを取得し、そのデータに基づいてTkinterウィンドウをリアルタイムで自動的に更新するプログラムを作成しようとしています。
次のように、メインスレッドから現在のデータを定期的に取得してウィンドウを更新する、ウィンドウ用の別のスレッドを作成しようとしました。
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()
それを実行すると、このエラーが発生します:
スレッドThread-2の例外:トレースバック(最後の最後の呼び出し):ファイル "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py"、行522、__bootstrap_innerself。 run()ファイル "analysis.py"、52行目、run self.lbl1.pack()ファイル "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter .py "、1764行目、pack_configure + self._options(cnf、kw))RuntimeError:メインスレッドがメインループにありません
このエラーをグーグルで検索すると、ほとんどの場合、2つの異なるスレッドからウィンドウを操作しようとしている投稿が表示されますが、そうしているとは思いません。何か案は?本当にありがとう!