我正在尝试为作业制作一个简单的老虎机python程序,我无法让老虎机图像更新。我想要发生的是让用户点击按钮,让每三秒钟用不同的图片动态更新三个标签,持续2秒。但是发生的事情是我的randint正在为数组生成随机索引号,但标签只在最后一个randint实例上显示一个新图像。这是我的代码:
def update_image():
global images
time.sleep(0.1)
y = images[randint(0, 3)]
slot1.delete()
slot1.configure(image = y)
print(y)
def slot_machine():
x = 0
while x != 10:
slot1.after(0,update_image)
x = x + 1
答案 0 :(得分:1)
问题在于您正在调用after(0, ...)
,这会将作业添加到“after”队列中,以便尽快运行。但是,while循环运行速度非常快,并且永远不会为事件循环提供处理排队事件的机会,因此整个循环在单个映像更改之前结束。
一旦事件循环能够处理事件,tkinter将尝试处理过期的所有待处理事件。由于您使用了超时零,因此它们都将过期,因此tkinter将尽可能快地运行它们。
更好的解决方案是让更新映像的功能也负责安排下一次更新。例如:
def update_image(delay, count):
<your existing code here>
# schedule the next iteration, until the counter drops to zero
if count > 0:
slot1.after(delay, update_image, delay, count-1)
有了这个,你调用它一次,之后它会反复调用自己:
update_image(100, 10)