(旧标题:如何正确删除cavas项?)
我的问题是,每当我想要将新图像加载到我的画布上并删除旧图像时,它会将新图像放在旧图像所在的空间旁边。 我的代码如下所示:
def load_to_canvas(fname, canvas):
img = Image.open(fname)
canvas.imgph = ImageTk.PhotoImage(img)
l = Label(canvas, image=canvas.imgph)
l.photo = canvas
l.pack(side=LEFT)
我尝试了各种选项,例如将其中一个放在load_to_canvas函数之上:
canvas.delete('all')
canvas.get_tk_widget.delete('all')
l.pack_forget()
或将变量设置为空。
我的画布用这些函数声明:
def create_canvas(self, canvasframe):
canvasframe.canvas = Canvas(canvasframe, width=200, height=200)
canvasframe.canvas.pack(expand=1, fill=BOTH)
return canvasframe.canvas
def create_canvasframe(self):
canvasframe = Frame(self)
canvasframe.grid(row=1, column=0, columnspan=2, rowspan=4,
padx=0, sticky=E+W+S+N)
return canvasframe
你可能会看到,我对Tkinter很新。具体来说,我的问题是旧图片被删除了,但是新图片没有放在它上面,而是放在旁边。
修改 我发现了这个问题。它是标签('def load_to_canvas'中的最后一行)到最左边空格的包装。不知何故,即使在删除旧图像之后,新图像的最左侧位置仍然是旧图像的右侧。使用'grid。(row = 0,column = 0,sticky = E + W + S + N)'将其更改为绝对位置,并且工作正常。
这使我在标题中要求的问题不再准确,所以我改变了它。我希望那很好。