Python-pack仅在方法完成后生效

Python-pack仅在方法完成后生效,python,tkinter,Python,Tkinter,我正在做一个小游戏,在这个游戏中,你输入一些数量n,你会得到n个随机颜色的颜色框。3秒钟后,提示用户尝试调用颜色帧的顺序 请注意,倒计时后的事件尚未执行(应该没有问题) 我有一种方法可以隐藏输入字段和确认按钮,显示颜色,并进行倒计时: def startgame(colornumber): #colornumber is the amount of frames ... colors=[] #array of "Frame" elements #loop that cre

我正在做一个小游戏,在这个游戏中,你输入一些数量n,你会得到n个随机颜色的颜色框。3秒钟后,提示用户尝试调用颜色帧的顺序

请注意,倒计时后的事件尚未执行(应该没有问题)

我有一种方法可以隐藏输入字段和确认按钮,显示颜色,并进行倒计时:

def startgame(colornumber): #colornumber is the amount of frames
    ...
    colors=[] #array of "Frame" elements
    #loop that creates the colored frames
    for i in range (0, colornumber):
        colors.append(Frame(window, width=60, height=60, background=randomcolor()))
        colors[i].pack(side=LEFT)

    #randomcolor() is a method that returns a random color string
    #like "white" or "red"

    #countdown loop
    for i in range(0, 3):
        time.sleep(1)   #do nothing for 1 second
        label.configure(text="ASD")    #Count down
        print(str(3-i))
    label.configure(text="What was the order? Click on the colors to choose")
该按钮调用函数如下:

colorNumberInput = Entry(window)
colorNumberInput.pack()
buttonConfirmNumber = Button(window, ..., command=lambda: startgame(int(colornumberInput.get()))
buttonConfirmNumber.pack()
由于某些原因,语句
color[i].pack(side=LEFT)
的效果仅在方法完成执行后发生;也就是说,在倒计时循环完成之后。结果是颜色出现在倒计时之后,而不是倒计时之前。我尝试将
print
语句放入创建彩色边框的循环中,但它仍然执行


为什么
pack(element)
仅在调用它的方法结束后才显示小部件?有什么办法可以解决这个问题吗?

Tkinter只能通过响应事件来刷新显示。当代码正在运行或程序正在休眠时,它无法响应事件


一个快速修复方法是在需要刷新屏幕时调用
window.update\u idletasks()
。这通常不是最好的解决方案,但通常已经足够好了。

在某些情况下“足够好”,但是时间。睡眠几乎总是很糟糕;在完全没有响应的GUI上花费三秒钟对用户来说是非常不友好的。@ShadowRanger:这里没有争论。