我想在画布上放置“master”图像的副本,我从tk.Listbox中选择了这个名称。完整的程序代码在这里是如此之大,所以我把它的一部分。
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
用于在画布上应用更改之前在标签上进行预览。
答案 0 :(得分:2)
保持对图像的引用。 <{1}}没有必要。
<强> copy.copy
强>
canvas.copy_image = label.master_image