我正在制作一个小游戏,你输入一些金额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)
仅在调用它的方法结束后显示小部件?有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
Tkinter只能通过响应事件来刷新显示。在代码运行或程序正在休眠时,它无法响应事件。
快速解决方法是在您希望屏幕刷新时调用window.update_idletasks()
。这通常不是最佳解决方案,但通常是足够好的。