Python 画布上的tkinter图像消失

Python 画布上的tkinter图像消失,python,tkinter,Python,Tkinter,我想把“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(

我想把“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()
从PIL导入图像,ImageTk
将Tkinter作为tk导入
导入目录缓存
导入副本
def回调(事件):
label.master_image=ImageTk.PhotoImage(image.open(path))
label.configure(image=label.master\u image)
def apply():
canvas.copy\u image=copy.copy(label.master\u image)
canvas.create_image(10,10,canvas.copy_image)
root=tk.tk()
框架=传统框架(主框架=根框架)
canvas=tk.canvas(master=frame)
listbox=tk.listbox(master=frame)
insert(tk.END,*dircache.listdir('./images'))
listbox.bind(“”,回调)
标签=传统标签(主标签=框架)
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.
标签。主图像
用于在画布上应用更改之前在标签上预览它。

保留对图像的引用<代码>复制。不需要复制

canvas.copy\u image=label.master\u image

from PIL import Image, ImageTk
import Tkinter as tk
import os

def callback(event):
    idx, = listbox.curselection()
    path = os.path.join('images', listbox.get(idx))
    label.master_image=ImageTk.PhotoImage(Image.open(path))
    label.configure(image=label.master_image)


def apply():
    canvas.copy_image = label.master_image
    canvas.create_image(10,10, image=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, *os.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()
从PIL导入图像,ImageTk
将Tkinter作为tk导入
导入操作系统
def回调(事件):
idx,=listbox.cursection()
path=os.path.join('images',listbox.get(idx))
label.master_image=ImageTk.PhotoImage(image.open(path))
label.configure(image=label.master\u image)
def apply():
canvas.copy\u image=label.master\u image
canvas.create_image(10,10,image=canvas.copy_image)
root=tk.tk()
框架=传统框架(主框架=根框架)
canvas=tk.canvas(master=frame)
listbox=tk.listbox(master=frame)
insert(tk.END,*os.listdir('images'))
listbox.bind(“”,回调)
标签=传统标签(主标签=框架)
button=tk.button(master=frame,text='Apply',command=Apply)
canvas.pack()
frame.pack()
listbox.pack()
label.pack()
button.pack()
root.mainloop()

是的,谢谢,它可以工作,但我看不出它们之间有什么全局性的区别。Grep
canvas.copy\u image*=
del*canvas.copy\u image
为您复制整个代码。我删除了
copy.copy
,它可以工作。也许,其他地方有错误。