繁体   English   中英

通过清除以前的图像上传图像

[英]Upload image by clearing previous image

所以我有这个简单的应用程序来上传图片,但现在我希望每次上传新图片时,之前的图片都会被清除。 正在寻找解决方案,在此先感谢。

def open():
    global my_image
    root.filename = filedialog.askopenfilename(initialdir="e:/images", title="Select A File",
                                               filetypes=(("png files", "*.png"), ("all files", "*.*")))
    my_label = Label(root, text=root.filename).pack()
    my_image = ImageTk.PhotoImage(Image.open(root.filename))
    my_image_label = Label(image=my_image).pack()


my_btn = Button(root, text="Open File", command=open).pack()

您必须在 function 之外定义标签,并在 function 内部对其进行更新,这样可以避免每次都用新数据覆盖标签。 看看这里:

# Define the labels initially
my_image_label = Label(root) 
my_label = Label(root)

def open_img():
    path = filedialog.askopenfilename(initialdir="e:/images", title="Select A File",
                                               filetypes=(("png files", "*.png"), ("all files", "*.*")))
    my_label.config(text=path) # Update the label with the path
    my_label.pack() # Pack it in there

    my_image = ImageTk.PhotoImage(file=path) # Make an ImageTk instance
    my_image_label.config(image=my_image) # Update the image label
    my_image_label.pack() # Pack the label
    my_image_label.img = my_img # Keep reference to the image

my_btn = Button(root, text="Open File", command=open_img)
my_btn.pack()

我都改变了什么?

  • 我使用了小部件的config()方法来帮助您编辑小部件的选项。

  • 我还删除了Image.open()的用法,因为您可以通过使用ImageTk.PhotoImagefile关键字参数来实现相同的目的,它隐式调用Image.open()

  • 我还删除了global并保留了对图像的引用。

  • 我还重命名了一些变量并将您的名称更改为 function,因为open()将覆盖 python 的内置open() function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM