組み込みの Python GUI Tkinter を使用してプログラムのプロトタイプを作成していますが、複数のラベルを同時に更新しようとすると問題が発生します。GUI は数回の更新で処理できますが、10 秒ほどでフリーズします。各ラベルには異なるセンサー データが表示されるため、すべてのラベルをほぼ同時に更新する必要があります。
現在、random
モジュールを使用して、実際のデータの代わりに常に数値を生成しています。同時に 10 ほどのラベルがこれを行っているため、tkinter で確実に処理できるようにしたいと考えています。ラベルも、1 秒ごと (約 200 ミリ秒) に更新されます。Windowsでpython 3.3を使用しています。
いくつかのオプションについて読みましたが、tkinter の経験がありません。リンク: こちら。 そしてここ。
マルチスレッドを検討する必要がありますか? マルチプロセッシング? 私はどちらの経験もありませんが、これを解決することを意味するのであれば、喜んで学びます。
私がやろうとしていることは可能tkinter
ですか?pygame
または別の GUIを使用する必要がありますか? ここで何が欠けていますか?
import random
from tkinter import *
class Application(Frame):
"""The GUI window"""
def __init__(self, master):
"""Setup the Frame"""
super(Application, self).__init__(master)
self.grid()
self.setupWidgets()
self.update()
def setupWidgets(self):
"""Setup widgets for use in GUI"""
#setup data readings
self.data_lbl_txt = "Data Readings"
self.data_lbl = Label(self, text = self.data_lbl_txt)
self.data_lbl.grid(row = 0, column = 1, columnspan = 2, sticky = E)
#setup first data piece
self.data1_txt = "First piece of data:"
self.data1_lbl = Label(self, text = self.data1_txt)
self.data1_lbl.grid(row = 1, column = 1, sticky = W)
self.data1 = StringVar()
self.data1_Var = Label(self, textvariable = self.data1)
self.data1_Var.grid(row = 1, column = 2, sticky = W)
#setup second data piece
self.data2_txt = "Second piece of data:"
self.data2_lbl = Label(self, text = self.data2_txt)
self.data2_lbl.grid(row = 2, column = 1, sticky = W)
self.data2 = StringVar()
self.data2_Var = Label(self, textvariable = self.data2)
self.data2_Var.grid(row = 2, column = 2, sticky = W)
def update(self):
self.data1.set(random.randint(1,10))
self.data1_Var.after(200, self.update)
self.data2.set(random.randint(1,10))
self.data2_Var.after(200, self.update)
root = Tk()
root.title("Data Output")
root.geometry("600x250")
window = Application(root)
window.mainloop()