为什么widget.pack(side = Left)将新小部件放到右边?

时间:2014-01-09 16:33:25

标签: python canvas tkinter

(旧标题:如何正确删除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)'将其更改为绝对位置,并且工作正常。

这使我在标题中要求的问题不再准确,所以我改变了它。我希望那很好。

0 个答案:

没有答案