在您的示例代码中,问题在于,首先,显示在循环内没有更新的变化,其次,如果它会更新,那么看到除最后一个数字之外的任何其他数字都会很快。
一个简单的修复方法是调用root.update_idletasks()
以更改显示以进行更新。
from Tkinter import *
import time
root = Tk()
def count():
for i in range(300):
Display.configure(text = 'The current number is: '+str(i))
root.update_idletasks()
time.sleep(0.01) # just to see something
Button = Button(root, text = 'Start', command = count)
Button.pack()
Display = Label(root)
Display.pack()
root.mainloop()
一个可能更好的方法是使用协程(我在这里包装成装饰器)和after_idle
:
import time
from Tkinter import *
root = Tk()
def updatesdisplay(func):
def driver(iterator):
try: next(iterator)
except StopIteration: pass
else: root.after_idle(driver, iterator)
def wrapped():
driver(func())
return wrapped
@updatesdisplay
def count():
for i in range(300):
time.sleep(0.005) # just to see something
Display.configure(text = 'The current number is: '+str(i))
yield # chance to update display here
Button = Button(root, text = 'Start', command = count)
Button.pack()
Display = Label(root)
Display.pack()
root.mainloop()