Tkinter 为什么这个程序先通过while循环,然后再通过for循环?

Tkinter 为什么这个程序先通过while循环,然后再通过for循环?,tkinter,python-3.7,Tkinter,Python 3.7,我有一个tkinter程序,我正试图从屏幕上删除我所做的一切,方法是将所有内容放入列表中,然后使用grid\u-forget()进行迭代。这是可行的,但之后我有一个计时器,它会把所有的东西都放回屏幕上。由于某些原因,它先通过计时器,然后清除屏幕,这是毫无意义的,因为它会立即将所有内容放回原处。这是代码的一部分: items = [rollingFrame, savingFrame, score_frame, rerollButton, logoLabel, remainingRolls]

我有一个tkinter程序,我正试图从屏幕上删除我所做的一切,方法是将所有内容放入列表中,然后使用
grid\u-forget()
进行迭代。这是可行的,但之后我有一个计时器,它会把所有的东西都放回屏幕上。由于某些原因,它先通过计时器,然后清除屏幕,这是毫无意义的,因为它会立即将所有内容放回原处。这是代码的一部分:

    items = [rollingFrame, savingFrame, score_frame, rerollButton, logoLabel, remainingRolls]
    for item in items:
        item.grid_forget()

    turnLabel = Label(root, text="turn {}".format(turn, 0), bg="lime green", anchor="center")
    turnLabel.grid(row=0, column=0, pady=300, padx=500)
    

    previousTime = time.time()
    while (time.time() - previousTime) < 3:
        print(time.time()-previousTime)

    turnLabel.grid_forget()
items=[rollingFrame、savingFrame、score_frame、rerollButton、logoLabel、remainingRolls]
对于项目中的项目:
项。网格_忘记()
turnLabel=标签(根,text=“turn{}”。格式(turn,0),bg=“石灰绿”,anchor=“中心”)
turnLabel.grid(行=0,列=0,pady=300,padx=500)
previousTime=time.time()
而(time.time()-previousTime)<3:
打印(time.time()-previousTime)
turnLabel.grid_忘记()

这不是你问题的答案,但这是一个更好的做法,可以避免这个问题

如果您想在Tkinter中指定的时间后执行某项操作,请使用after方法

def my_函数():
turnLabel.grid_忘记()
root.after(3000,my_函数)
第一个参数是以毫秒为单位的时间。 这是很常见的需要做这样的事情,例如,如果你需要运行一个函数,直到一个变量发生变化,你可以调用函数本身

forget=False
def my_函数():
全球遗忘
如果忘记:
turnLabel.grid_忘记()
其他:
root.after(3000,my_函数)
root.after(3000,my_函数)
此代码大约每3秒运行一次my_功能代码,直到变量
forget
设置为
True
值。
我没有运行此代码,因此如果出现语法问题,我深表歉意。

while循环会阻止tkinter更新。在while循环之前添加
turnLabel.update()