Я хочу поместить копии «основного» изображения, которое я выбираю из tk.Listbox на холсте. Полный программный код настолько велик, что его можно разместить здесь, поэтому я поместил части этого.tkinter images на холсте исчезает
from PIL import Image, ImageTk
import Tkinter as tk
import dircache
import copy
def callback(event):
label.master_image=ImageTk.PhotoImage(Image.open(path))
label.configure(image=label.master_image)
def apply():
canvas.copy_image=copy.copy(label.master_image)
canvas.create_image(10,10,canvas.copy_image)
root=tk.Tk()
frame=tk.Frame(master=root)
canvas=tk.Canvas(master=frame)
listbox=tk.Listbox(master=frame)
listbox.insert(tk.END, *dircache.listdir('./images'))
listbox.bind('<ButtonRelease-1>', callback)
label=tk.Label(master=frame)
button=tk.Button(master=frame, text='Apply', command=apply)
canvas.pack()
frame.pack()
listbox.pack()
label.pack()
button.pack()
root.mainloop()
Но когда я просто нажмите на другой пункт меню (не на кнопку «Применить»), что означает, что label.master_image
изменения, изображение на холсте исчезает.
P.S. label.master_image
используется для предварительного просмотра на этикетке, прежде чем применять изменения на холсте.
С или без copy.copy моей версии кода не работает – EgorPuzyrev
вы ли попробовать мой код? – falsetru
Да, спасибо, это работает, но я не вижу такой глобальной разницы между ними. – EgorPuzyrev