在回叫执行期间更改tkinter按钮上的文本

时间:2016-03-06 10:36:28

标签: python python-2.7 python-3.x tkinter sleep

我正在尝试在执行该特定按钮的回叫时更改按钮上的文本。

假设我的“按钮”上有“运行”作为文本,我想在点击它之后将其更改为“正在运行”,并且在回调执行期间。

完成回叫执行后,我想将其更改回“运行”。

我没有得到我的代码的哪一部分是错误的。

import Tkinter as tk
import time

root = tk.Tk()

def change():
    button.config(text='Running')
    button.config(state='disabled')
    print "start"
    time.sleep(5)
    print "end"
    button.config(state='normal')
    button.config(text="Run")

button = tk.Button(root,text="Run",command=change)
button.pack()


root.mainloop()

1 个答案:

答案 0 :(得分:2)

Sleep会使WHOLE程序暂停一段时间,包括界面,通常会因为主循环的工作方式而停止更改界面本身。

在这里,试试.after函数,这应该可以正常工作。

import Tkinter as tk
import time

root = tk.Tk()

def change():
    button.config(text='Running')
    button.config(state='disabled')
    print "start"
    root.after(5000,changeback)
def changeback():
    print "end"
    button.config(state='normal')
    button.config(text="Run")

button = tk.Button(root,text="Run",command=change)
button.pack()


root.mainloop()

root.after(5000,changeback)将在5000毫秒后调用命令,或者在不停止整个程序的情况下调用5秒,即changeback()