[英]Disable Tkinter button while executing command
我想在執行命令時禁用tk inter按鈕,並在命令執行完成后將其啟用。 我已經嘗試過此代碼,但似乎無法正常工作。
from Tkinter import *
import time
top = Tk()
def Run(object):
object.config(state = 'disabled')
print 'test'
time.sleep(5)
object.config(state = 'normal')
b1 = Button(top, text = 'RUN', command = lambda : Run(b1))
b1.pack()
top.mainloop()
命令執行運行良好,但是在執行命令時每次單擊按鈕,“測試”都會在運行功能完成后立即出現在控制台中。 這意味着在執行運行功能時不會禁用該按鈕。 有任何解決此問題的建議嗎?
提前致謝
我更喜歡使用Tkinter的“之后”方法,因此可以在5秒倒計時的同時完成其他操作。 在這種情況下,這只是退出按鈕。
from Tkinter import *
##import time
from functools import partial
top = Tk()
def Run(object):
if object["state"] == "active":
object["state"] = "disabled"
object.after(5000, partial(Run, object))
else:
object["state"] = "active"
print object["state"]
b1 = Button(top, text = 'RUN')
b1.pack()
## pass b1 to function after it has been created
b1["command"] = partial(Run, b1)
b1["state"]="active"
Button(top, text="Quit", command=top.quit).pack()
top.mainloop()
使用pack_forget()禁用,然后使用pack()重新啟用。 這將導致“打包”窗口管理器暫時“忘記”它具有的按鈕,直到您再次調用打包。
from Tkinter import *
import time
top = Tk()
def Run(object):
object.pack_forget()
print 'test'
time.sleep(5)
object.pack()
b1 = Button(top, text = 'RUN', command = lambda : Run(b1))
b1.pack()
top.mainloop()
你需要
object.config(state = 'disabled')
b1.update()
time.sleep(5)
object.config(state = 'normal')
b1.update()
更新按鈕並將執行傳遞回Tkinter。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.