在您的示例代碼,問題在於,首先,顯示在你的循環內更新沒有任何變化,第二,如果它更新,它將快速查看除最後一個以外的任何其他數字。
一個簡單的解決辦法是調用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()
感謝,這正是我一直在尋找! 一個次要的事情:如果我使用Display.place()方法,和迭代thorugh包含字符串(字符串的長度可以在24的範圍內和65之間變化)的列表,顯示它從左跳文本時對。 如果我修改代碼的方式,即用戶必須點擊該按鈕,然後它會顯示在列表中的下一個項目,該文本是靜態的(所以它的工作原理就是我想要的)。 有沒有解決方案? – user2665140
@ user2665140可能很難說,沒有看到一個例子。也許只需用代碼重新發布問題發佈一個新問題。 – sloth