【问题标题】:Change picture after 3sec in Tkinter Canvas在 Tkinter Canvas 中 3 秒后更改图片
【发布时间】:2017-12-09 20:01:20
【问题描述】:

在 Tkinter 画布中,我想显示 pic1.gif 并在 3 秒后将图片更改为 pic2.gif。当我运行下面的程序时,它会立即显示 pic2.gif。

from tkinter import *
from time import sleep


canvas_width = 300
canvas_height =300

master = Tk()

canvas = Canvas(master, 
           width=canvas_width, 
           height=canvas_height)
canvas.pack()

img = PhotoImage(file="pic1.gif")
canvas.create_image(20,20, anchor=NW, image=img)
sleep(3)
canvas.delete("all")
img = PhotoImage(file="pic2.gif")
canvas.create_image(20,20, anchor=NW, image=img)
mainloop()

非常感谢!

【问题讨论】:

    标签: image python-3.x tkinter


    【解决方案1】:

    你不能在 tkinter 中使用time.sleep,你必须使用主循环,你可以通过after 方法访问它。

    from tkinter import *
    
    canvas_width = 300
    canvas_height =300
    
    master = Tk()
    
    canvas = Canvas(master, 
               width=canvas_width, 
               height=canvas_height)
    canvas.pack()
    
    img = PhotoImage(file="pic1.gif")
    canvas.create_image(20,20, anchor=NW, image=img)
    
    def change_img():
        canvas.delete("all")
        canvas.img = PhotoImage(file="pic2.gif")
        canvas.create_image(20,20, anchor=NW, image=canvas.img)
    
    master.after(3000, change_img) # run the change_img function in 3,000 milliseconds
    
    mainloop()
    

    【讨论】:

    • John Shipman / New Mexico Tech 的 tkinter 第三方文档是 Tkinter 的最佳参考资料之一。 after() 函数在 infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html 中描述
    • 要每 3 秒更改一次图像,最后我不得不在 change_img() 中调用 master.after(3000, change_img),我希望 master.after 是某种监听器,这不会无限递归。有没有更好的选择?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多