我想了解为什么此代码:
import time
for i in range(1,11):
print(i)
time.sleep(1)
显示(应显示!)从1到10的数字,每1秒显示一次,而此代码:
from tkinter import *
import time
root = Tk()
for i in range(1,11):
Label(root, text = i).grid(row=0, column=i-1, padx=5, pady =5)
time.sleep(1)
root.mainloop()
等待10秒钟,然后显示一个包含10个数字的窗口(而不是一个一个地添加)。我知道这是一个愚蠢的问题,但我真的听不懂!非常感谢!亚历山德罗
大多数GUI的工作与您期望的不同。
它们以异步方式工作,这意味着,您需要设置窗口并启动事件循环。此事件循环将显示您在调用事件循环之前设置的所有小部件,标签等,并等待任何事件(GUI事件,例如鼠标或键盘事件,计时器事件,甚至是网络事件)。
遇到任何事件时,将调用与该事件相关的代码,并且该代码可以请求更改GUI(显示或隐藏元素,更改图形小部件的标签或属性)。但是仅对GUI进行更改当您将控制权交还给主循环时(当处理事件的代码完成时)执行]
在给定的代码中,您可以使用睡眠语句在for循环中更改标签,但是只有在for循环完成之后,才可以调用主循环,并且此时将显示GUI的最终状态。] >
所以您遇到的几乎是所有GUI /异步类型的应用程序的已知问题。
您必须重写代码,以便启动一个计时器事件,并且在计时器事件触发时,一个函数将设置标签并将计数器增加1。如果计数器不是11,它将重新启动另一个计时器