【问题标题】:How to display the new image after some time delay under the old image that is already displaying in tkinter window?如何在 tkinter 窗口中已经显示的旧图像下延迟一段时间后显示新图像?
【发布时间】:2020-11-26 18:06:43
【问题描述】:

我想使用 tkinter 在画布上显示两个图像 pic1.pngpic2.png。第一个图像 (pic2.png) 已经显示在 tkinter 窗口上。但是,第二张图片 (pic1.png) 将在 1 秒后出现,并位于第一张图片的后面。

为了实现这一点,我写了这段代码,

from tkinter import *
from PIL import Image, ImageTk

root = Tk()

frame = Frame(root)
frame.pack()

canvas = Canvas(frame, width=250, height=250, bd=0, highlightthickness=0, relief='ridge')
canvas.pack()

my_pic1 = PhotoImage(file="my_pic1.png")
frame.after(1000, lambda : canvas.create_image(50,50,image=my_pic1, anchor=NW, tag="A"))

my_pic2 = PhotoImage(file="my_pic2.png")
canvas.create_image(50,50,image=my_pic2, anchor=NW, tags="B")

canvas.tag_raise("B")
canvas.tag_lower("A")

root.mainloop()

但是我将第二张图片(pic1.png)放在第一张图片(pic2.png)后面时遇到了问题。我正在实现的是第二张图片(pic1.png)出现在第一张图片(pic2.png)的上方。请在我的代码中帮助我。

【问题讨论】:

  • 在后面?你的意思是第一张图片会覆盖第二张图片?
  • 是的,没错!第二张图片的尺寸比第一张图片大一点,所以即使在第一张图片的后面也能看到。

标签: python python-3.x tkinter canvas tkinter-canvas


【解决方案1】:

canvas.tag_lower("A")被执行时,带有“A”标签的图像还没有被创建,因为它被安排在一秒后创建。

你应该在创建图像后调用它:

frame.after(1000, lambda: (canvas.create_image(50,50,image=my_pic1, anchor=NW, tag="A"), canvas.tag_lower("A")))

【讨论】:

  • 非常感谢!有用!但是当我在画布中添加背景图像时,带有标签“A”的图像甚至显示在背景图像后面并且无法显示。这种情况该怎么办?
  • 使用canvas.tag_lower("A", "B") 使“A”低于“B”。
  • 太棒了!非常感谢!
猜你喜欢
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 2019-03-04
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
相关资源
最近更新 更多