#python #python-3.x #tkinter #canvas #tkinter-canvas
#python #python-3.x #tkinter #холст #tkinter-canvas
Вопрос:
Я хочу отобразить два изображения pic1.png
и pic2.png
на холсте с помощью tkinter. Первое изображение ( 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
). Пожалуйста, помогите мне в моем коде.
Комментарии:
1. позади? Вы имеете в виду, что 1-е изображение будет покрывать второе изображение?
2. Да, точно! Размер второго изображения немного больше по сравнению с первым изображением, поэтому оно будет видно, даже если оно находится за первым изображением.
Ответ №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")))
Комментарии:
1. Огромное спасибо! Это работает! Но когда я добавляю фоновое изображение в canvas, изображение с тегом «A» отображается даже за фоновым изображением и не может отображаться. Что делать в этом случае?
2. Используйте
canvas.tag_lower("A", "B")
, чтобы сделать «A» ниже «B».3. Удивительно! Большое вам спасибо!