Python 3 PhotoImage在多次渲染时会在标签上重复出现

时间:2017-03-17 06:54:06

标签: python tkinter

我有一个Python 3 Tkinter程序,它应该用特殊的文件格式渲染图像。

from tkinter import *

image = []

path = Tk()
display = Toplevel()

display.wm_title("RCSVvisual")
display.wm_iconbitmap("favicon.ico")

path.wm_title("RCSVpath")
path.wm_iconbitmap("favicon.ico")

entry1 = Entry(path)
entry1.pack(side=LEFT)

photo = PhotoImage(width=240, height=180)

def refresh():
    file_path = entry1.get()
    with open(file_path, "r") as file:
        for line in file:
            thisLine = line.strip()
            thisArray = thisLine.split(",")
            image.append(thisArray)

    for c1 in range(0, len(image)):
        for c2 in range(0, len(image[c1])):
            photo.put(image[c1][c2], (c1, c2))

button = Button(path, text="Open File", command=refresh)
button.pack(side=LEFT)

label = Label(display, image=photo)
label.pack()

path.mainloop()
display.mainloop()

这是我测试的文件:

#F00,#0F0,#00F,#F00
#0F0,#00F,#F00,#0F0
#00F,#F00,#0F0,#00F
#F00,#0F0,#00F,#F00

但是,如果您多次运行程序,图像似乎不会替换旧图像;而是显示在原始图像的右侧。我在这里做错了吗?我应该再次.pack()目标标签吗?

1 个答案:

答案 0 :(得分:1)

您总是追加image

如果要创建新图像,则应首先清空现有列表。

def refresh():
    image = []
    file_path = entry1.get()
    ....

此外,几乎总是您在程序中只需要一个主循环。您应该删除display.mainloop()行。