1

組み込みの 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()
4

1 に答える 1