2017-03-17 13 views
1

画像を特殊なファイル形式でレンダリングするPython 3 Tkinterプログラムがあります。Python 3 PhotoImageは複数回レンダリングされたときにラベル全体で繰り返されます

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()する必要がありますか?

答えて

2

いつもimageに追加されています。

新しいイメージを作成する場合は、まず既存のリストを空にする必要があります。また

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

はほとんど常に、あなたのプログラムで唯一のメインループを必要とするだろう。 display.mainloop()行を削除する必要があります。

関連する問題