如何动态更新tkinter标签小部件中的图像?

时间:2016-12-13 19:30:28

标签: python-3.x tkinter

我正在尝试为作业制作一个简单的老虎机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

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)