我希望按钮启动命令,然后在执行时禁用并在执行完成后再次启用。
当我单击该按钮时,它似乎被禁用并且命令被执行。但是,当我在禁用按钮时单击该按钮时,该命令会在第一次执行完成后第二次执行。
似乎在第二次单击后,该按钮确实被禁用了,因为我可以在禁用它时单击几次,并且只能重复一次。
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()
当您在该过程中单击该按钮时sleep
,您将按钮单击排队以在下一个更新周期中进行处理。在此期间sleep
tkinter 不更新。之后sleep
,您可以在函数返回并处理单击之前将按钮更改回正常状态。由于按钮再次激活,click
再次被调用。
您可以通过让 tkinter 更新来解决这个问题before您再次激活该按钮,这将消除任何排队的点击事件,而该按钮仍处于停用状态。
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")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)