長時間実行するための GUI を作成しようとしていますが、GUI スレッドのロックを回避する方法がわかりません。ttk.Progressbar を使用したいのですが、バーの値を更新できず、ウィンドウに GUI を更新させることができません。更新処理を独自の関数に入れて直接更新しようとしましたが、どちらも機能しませんでした。ハンドラーの値を更新することをお勧めします。このスクリプトは、ダウンロード、処理、アップロードを行うため、3 つの別々のバーが見栄えがよくなります。
from Tkinter import *
import time, ttk
class SampleApp(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.pack()
self.prog = ttk.Progressbar(self, orient = 'horizontal', length = 200, mode = 'determinate')
self.prog.pack()
self.button = Button(self,text='start',command=self.start)
self.button.pack()
def start(self):
self.current = 0
self.prog["value"] = 0
self.max = 10
self.prog["maximum"] = self.max
self.main_prog()
def handler(self):
self.prog['value'] += 1
def main_prog(self):
for x in range(10):
time.sleep(2)
self.handler()
root = Tk()
app = SampleApp(master = root)
app.mainloop()