我正在更新加載欄(標簽)的百分比,它應該在我的程式啟動時自動啟動。當“加載欄”達到 100% 時,應該洗掉“加載欄”,程式的其余部分應該繼續,盡管當我啟動程式時,視窗直到大約 5 秒才回應。
number = 0
number1 = str(number)
Labe = tk.Label(root, width=10,bd=1, bg="#ADA5A5", font=("Arial Bold", 36), fg="White")
Labe.grid(row=0, column=0)
def work():
global number1
Labe['text'] = "Loading" " " number1 "%"
global number
number = number 1
number1 = str(number)
if number == 102:
root.after(1000)
print("end")
Labe.grid_remove()
num = 101
for x in range(num):
print("He")
root.after(50, work)
root.after(50)
#Adding stuff to root
rootHelloLabel = tk.Label(root, text="Ordering system, please sign in", bg="#7271AD",
fg="White", font=("Arial Bold", 40), width=48, height=2)
placeholder = tk.Label(root, text="", pady=20, bg="#ACAD71")
placeholder.grid(row=0, column=0)
rootHelloLabel.grid(row=1, column=0)
placeholder1 = tk.Label(root, text="", pady=70, bg="#ACAD71")
placeholder1.grid(row=2, column=0)
loginButton = tk.Button(root, pady=30, padx=80, text="Login", font=("Arial Bold", 27),
bg="#71AD90", fg="#D0CFD1", command=login)
loginButton.grid(row=3, column=0)
adminButton = tk.Button(root, pady = 10, padx = 40, text="Admin",
font=("Arial Bold", 27), bg="#71AD90", fg="#D0CFD1")
adminButton.grid(row=5, column=0)
uj5u.com熱心網友回復:
我做了三個小改動,我認為它有效。
number = 0
number1 = str(number)
Labe = tk.Label(root, width=10,bd=1, bg="#ADA5A5", font=("Arial Bold", 36), fg="White")
Labe.grid(row=0, column=0)
def work():
global number1
Labe['text'] = "Loading" " " number1 "%"
global number
number = number 1
number1 = str(number)
if number == 102:
root.after(1000)
print("end")
Labe.grid_remove()
num = 101
for x in range(num):
print("He")
root.after(50, work)
root.after(50)
root.update() # added this so the window displays for one frame
# it's similar to mainloop() but only runs once
#Adding stuff to root
rootHelloLabel = tk.Label(root, text="Ordering system, please sign in", bg="#7271AD",
fg="White", font=("Arial Bold", 40), width=48, height=2)
placeholder = tk.Label(root, text="", pady=20, bg="#ACAD71")
placeholder.grid(row=0, column=0)
rootHelloLabel.grid(row=1, column=0)
placeholder1 = tk.Label(root, text="", pady=70, bg="#ACAD71")
placeholder1.grid(row=2, column=0)
loginButton = tk.Button(root, pady=30, padx=80, text="Login", font=("Arial Bold", 27),
bg="#71AD90", fg="#D0CFD1", command=lambda: login())
loginButton.grid(row=3, column=0) # added lambda function so this only runs when clicked
adminButton = tk.Button(root, pady = 10, padx = 40, text="Admin",
font=("Arial Bold", 27), bg="#71AD90", fg="#D0CFD1")
adminButton.grid(row=5, column=0)
root.mainloop() # added this so that the program runs when done (can remove aswell)
我希望這對你有用。我不太明白這個問題,但是一旦我添加了 update() 函式,它就可以正常作業了,我意識到你所說的加載欄是什么意思。我希望這有幫助!
uj5u.com熱心網友回復:
after(50)您在-loop 中運行 100 次,for因此它可以停止程式 5 秒。而且我不知道你是否真的需要它。
我會after(50, work)直接跑進去work
def work():
global number # PEP8: all `global` at the beginning of function
labe['text'] = f"Loading {number}%"
number = 1
if number > 100:
root.update() # to update last text in label because `after(1000)` will block it
root.after(1000)
print("end")
labe.grid_remove()
else:
root.after(50, work)
完整的作業代碼(有其他更改):
PEP 8——Python 代碼風格指南
import tkinter as tk
# --- functions --- # PEP8: all functions directly after imports (and after all classes)
def work():
global number # PEP8: all `global` at the beginning of function
labe['text'] = f"Loading {number}%"
number = 1
if number > 100:
root.update() # to update last text in label because `after(1000)` will block it
root.after(1000)
print("end")
labe.grid_remove()
else:
# run again
root.after(50, work)
def login():
pass
# --- main ---
number = 0
root = tk.Tk()
labe = tk.Label(root, width=10, bd=1, bg="#ADA5A5", font=("Arial Bold", 36), fg="White")
labe.grid(row=0, column=0)
root_hello_label = tk.Label(root, text="Ordering system, please sign in", bg="#7271AD",
fg="White", font=("Arial Bold", 40), width=48, height=2)
root_hello_label.grid(row=1, column=0)
placeholder1 = tk.Label(root, text="", pady=20, bg="#ACAD71")
placeholder1.grid(row=0, column=0)
placeholder2 = tk.Label(root, text="", pady=70, bg="#ACAD71")
placeholder2.grid(row=2, column=0)
login_button = tk.Button(root, pady=30, padx=80, text="Login", font=("Arial Bold", 27),
bg="#71AD90", fg="#D0CFD1", command=login)
login_button.grid(row=3, column=0)
admin_button = tk.Button(root, pady = 10, padx = 40, text="Admin",
font=("Arial Bold", 27), bg="#71AD90", fg="#D0CFD1")
admin_button.grid(row=5, column=0)
# run first time
root.after(50, work)
root.mainloop()
編輯:
如果您需要使用for-loop 運行,那么您應該設定不同的時間after(..., work)
for i in range(1, 102):
root.after(50*i, work)
Full working code:
import tkinter as tk
# --- functions --- # PEP8: all functions directly after imports (and after all classes)
def work():
global number # PEP8: all `global` at the beginning of function
labe['text'] = f"Loading {number}%"
number = 1
if number > 100:
root.update() # to update last text in label because `after(1000)` will block it
root.after(1000)
print("end")
labe.grid_remove()
def login():
pass
# --- main ---
number = 0
root = tk.Tk()
labe = tk.Label(root, width=10, bd=1, bg="#ADA5A5", font=("Arial Bold", 36), fg="White")
labe.grid(row=0, column=0)
root_hello_label = tk.Label(root, text="Ordering system, please sign in", bg="#7271AD",
fg="White", font=("Arial Bold", 40), width=48, height=2)
root_hello_label.grid(row=1, column=0)
placeholder1 = tk.Label(root, text="", pady=20, bg="#ACAD71")
placeholder1.grid(row=0, column=0)
placeholder2 = tk.Label(root, text="", pady=70, bg="#ACAD71")
placeholder2.grid(row=2, column=0)
login_button = tk.Button(root, pady=30, padx=80, text="Login", font=("Arial Bold", 27),
bg="#71AD90", fg="#D0CFD1", command=login)
login_button.grid(row=3, column=0)
admin_button = tk.Button(root, pady = 10, padx = 40, text="Admin",
font=("Arial Bold", 27), bg="#71AD90", fg="#D0CFD1")
admin_button.grid(row=5, column=0)
# 102-1 = 101 loops, because it needs to display values 0...100 which gives 101 values
for i in range(1, 102):
root.after(50*i, work)
root.mainloop()
EDIT:
Because after(1000) freezes all GUI for 1 second so it it better to use after(1000, remove_label) to execute other function after 1 second and this doesn't freeze GUI.
def work():
global number
labe['text'] = f"Loading {number}%"
number = 1
if number > 100:
root.after(1000, remove_label)
else:
root.after(50, work)
def remove_label():
print("end")
labe.grid_remove()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/455118.html
上一篇:JavaSwing登錄視窗未關閉
