【スポンサーリンク】
threadingモジュールでProgressbarを表示
以下の例では、タイマー起動中に同時にプログレスバーを表示させて処理中であることを示している。threadingモジュールを用いてタイマー処理を別スレッドにしているため、平行してProgressbarの表示等、画面の更新処理を行うことができる。
import threading import time from tkinter import ttk import tkinter #5秒タイマー def timer(): p.start(5) #プログレスバー開始 for i in range(6): time.sleep(1) #1秒待機 b["text"] = i #秒数表示 p.stop() #プログレスバー停止 #ボタンクリック時に実行する関数 def button_clicked(): t = threading.Thread(target=timer) #スレッド立ち上げ t.start() #スレッド開始 root = tkinter.Tk() #プログレスバー p = ttk.Progressbar( root, mode="indeterminate", #非確定的 ) p.pack() #ボタン b = tkinter.Button( root, width=15, text="start", command=button_clicked, ) b.pack() root.mainloop()
ボタンをクリックするとタイマーが起動し、同時にプログレスバーが動作開始する。5秒後、タイマーとプログレスバーが同時に停止する。
【スポンサーリンク】
Progressbarが動かない例
以下の例のようにthreadingモジュールを使用しないと、タイマーループが完了するまで画面が更新されないため、プログレスバーが動作しない。
import time from tkinter import ttk import tkinter #ボタンクリック時に実行する関数 def button_clicked(): p.start(5) #プログレスバー開始 for i in range(6): time.sleep(1) #1秒待機 b["text"] = i #秒数表示 p.stop() #プログレスバー停止 root = tkinter.Tk() #プログレスバー p = ttk.Progressbar( root, mode="indeterminate", ) p.pack() #ボタン b = tkinter.Button( root, width=15, text="start", command=button_clicked, ) b.pack() root.mainloop()
【スポンサーリンク】