我希望按钮启动命令,然后在执行时被禁用,并在执行完成后再次启用。
当我单击该按钮时,它似乎被禁用并且命令被执行。但是,当我在禁用按钮的情况下单击该按钮时,该命令将在完成第一次执行后再次执行。
第二次单击后,该按钮似乎已被禁用,因为在禁用的情况下我可以单击几次,并且只重复一次。
import tkinter as tk
import time
class Button:
def __init__(self, master):
frame=tk.Frame(master)
frame.pack()
self.button1=tk.Button(frame, text="Ready",bg="green", fg="white", command=self.click)
self.button1.pack()
def click(self):
self.button1.config(bg="red", text="Busy", state="disabled")
self.button1.update()
doSth()
self.button1.config(bg="green", fg="white", text="Ready", state="normal")
self.button1.update()
def doSth():
time.sleep(3)
print("done")
root = tk.Tk()
b = Button(root)
root.mainloop()
答案 0 :(得分:2)
在sleep
期间单击按钮时,会将按钮单击排队,以在下一个更新周期中进行处理。在sleep
期间,tkinter不会更新。在sleep
之后,您可以将按钮改回正常状态,然后函数返回并处理单击。由于该按钮再次处于活动状态,因此再次调用click
。
您可以通过让tkinter在再次激活按钮之前更新 来解决此问题,这将消除在按钮仍处于停用状态时所有排队的单击事件。
def click(self):
self.button1.config(bg="red", text="Busy", state="disabled")
self.button1.update()
doSth()
self.button1.update()
self.button1.config(bg="green", fg="white", text="Ready", state="normal")