【问题标题】:why is this program going through the while loop first and then the for loop?为什么这个程序先执行while循环,然后执行for循环?
【发布时间】:2020-10-23 12:06:14
【问题描述】:

我有一个 tkinter 程序,我试图通过将所有内容放在一个列表中然后使用 grid_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()

【问题讨论】:

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

标签: tkinter python-3.7


【解决方案1】:

这不是您问题的答案,但这是避免该问题的更好做法。

如果你想在 Tkinter 中指定时间后做某事,请使用 after 方法。

def my_function():
    turnLabel.grid_forget()

root.after(3000, my_function)

第一个参数是以毫秒为单位的时间。 需要做这样的事情是很常见的,例如,如果你需要运行一个函数直到变量发生变化,你可以让函数自己调用。

forget = False

def my_function():
    global forget
    if forget:
        turnLabel.grid_forget()
    else:
        root.after(3000, my_function)

root.after(3000, my_function)

此代码将大约每 3 秒运行一次 my_function 代码,直到变量 forget 设置为 True 值。 我没有运行此代码,如果有任何语法问题,我深表歉意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多