我需要顯示一個進度條,以向用戶指示正在發生的事情。我想在我點擊CLASSIFY(如圖所示)開始一個函式時顯示該進度條,然后該進度條將在該函式結束時消失。
這是一個函式:
pbar = ttk.Progressbar(gui1, orient="horizontal", length=300)
pbar.place(x=500, y=120)
def Classifyall() 。
pbar.start(15)
table = BeautifulTable()
table.column_headers = ["檔案名", "檔案格式"]
directory_path = '/home/.../All files/*')
file_list = glob.glob(directory_path)
for file in file_list:
filepath, file_extention = os.path.splitext(file)
filename = filepath.rsplit('/', 1) [1]
table.append_row([filename, file_extention])
tx.insert(END, table)
pbar.stop()
我在這里創建了一個包含函式的選單欄
。tool_menu = Menu(menu)
menu.add_cascade(label="工具", menu=tool_menu)
tool_menu.add_command(label="Classify"/span>, command=Classifyall)
uj5u.com熱心網友回復:
你可以使用tkinter.ttk.Progressbar:
import tkinter
import tkinter.ttk as ttk
w = tkinter.Tk()
pbar = ttk.Progressbar(w)
它使用了兩種方式來使其 "進步":
1:自動化的進度條。
1:自動進展 使用 注意:一旦進度條完成了,你必須呼叫 2:手動進展 進度條也可以通過呼叫 uj5u.com熱心網友回復: 最好在一個執行緒中運行一個耗時的任務,否則會使tkinter應用程式沒有回應。
我使用另一個函式 在該函式中:
標籤:start()和stop()方法,你可以讓進度條以一定的速度自行前進。一個引數可以傳遞給start(),指定每次更新之間的毫秒數。因此,呼叫pbar.start(50)將使進度條每50毫秒前進1%。呼叫stop()將停止進度條并將其進度重置為0%。
stop(),否則它將重置為0%并重新開始進度。
step()方法手動進行。必須向step()傳遞一個引數,指定要進展的百分比。因此,呼叫pbar.step(35)可以為進度條增加35%的進度。沒錯,負數也是允許的。pbar.step(-35).start_classification(),在選單項Classify被選中后執行。
Classifyall()Classifyall()Classifyall()的結果更新文本框import threading
from tkinter import ttk
...
# added argument var (a tkinter StringVar)
def Classifyall(var)。
table = BeautifulTable()
table.column_headers = ["檔案名"/span>, "檔案格式"/span>]
directory_path = '/home/.../All files/*')
file_list = glob.glob(directory_path)
for file in file_list:
filepath, file_extention = os.path.splitext(file)
filename = filepath.rsplit('/', 1) [1]
table.append_row([filename, file_extention])
# note that it is not safe to update tkinter widget in a child thread[/span].
# 所以使用傳遞的tkinter變數來保存結果。
var.set(table)
def start_classification()。
# 創建一個進度條并啟動影片'horizontal', length=300, mode='indeterminate')
pbar.place(relx=0.5, rely=0.5, anchor='c')
pbar.start()
var = StringVar() #持有Classifyall()的結果。
# 在子執行緒中執行Classifyall()
threading.Thread(target=Classifyall, args=(var,)).start()
# 等候子執行緒完成
tx.wait_variable(var)
pbar.destroy()
tx.insert(END, var.get())
...
tool_menu = Menu(menu)
tool_menu.add_command(label='Classify', command=start_classification) #呼叫start_classification()代替。
menu.add_cascade(label='工具', menu=tool_menu)
...

