簡體   English   中英

執行命令時禁用Tkinter按鈕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM