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