1
저는 파이썬에서 초보자입니다. 그래서 이것은 너무 간단한 질문 일지 모르지만 도움이 필요합니다.이 코드로 나는 tkinter 라벨의 이미지를 업데이트 할 수 없습니다. 새로운로드 된 이미지의 속성에 따라 창 크기를 조정할 수도 있지만 새 이미지는 tkinter 레이블에 표시되지 않습니다.tkinter 레이블에서 이미지를 업데이트하는 방법은 무엇입니까?
from Tkinter import Frame, Tk, Label, Text, Menu, END, BOTH, StringVar
from PIL import ImageTk, Image
import numpy
import tkFileDialog
class DIP(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("DIP Algorithms- Simple Photo Editor")
self.pack(fill=BOTH, expand=1)
menubar = Menu(self.parent)
self.parent.config(menu=menubar)
#Open Image Menu
fileMenu = Menu(menubar)
fileMenu.add_command(label="Open", command=self.onOpen)
menubar.add_cascade(label="File", menu=fileMenu)
#menu for image ngative
basicMenu=Menu(menubar)
basicMenu.add_command(label="Negative", command=self.onNeg)
menubar.add_cascade(label="Basic", menu=basicMenu)
#Image Negative Menu callback
def onNeg(self):
I2=255-self.I;
im = Image.fromarray(numpy.uint8(I2))
photo2=ImageTk.PhotoImage(im)
self.label2= Label(self.parent,border=25,image=photo2)
self.label2.image = photo2 # keep a reference!
self.label2.grid(row=1, column=2)
def setImage(self):
self.img=Image.open(self.fn)
self.I = numpy.asarray(self.img)
l,h = self.img.size
text=str(2*l+100)+"x"+str(h+50)+"+0+0"
self.parent.geometry(text)
photo = ImageTk.PhotoImage(self.img)
self.label1 = Label(self.parent,border=25,image=photo)
self.label1.configure(image=photo)
self.label1.image = photo # keep a reference!
self.label1.grid(row=1, column=1)
#Open Callback
def onOpen(self):
ftypes = [('Image Files', '*.tif *.jpg *.png')]
dlg = tkFileDialog.Open(self, filetypes = ftypes)
filename = dlg.show()
self.fn=filename
#print self.fn #prints filename with path here
self.setImage()
#def onError(self):
#box.showerror("Error", "Could not open file")
def main():
root = Tk()
DIP(root)
root.geometry("320x240")
root.mainloop()
if __name__ == '__main__':
main()
이 코드를 실행하고 이미지를 열면 label1에 표시됩니다. 그러나 다른 이미지를 다시 열면 같은 라벨에 표시되기를 기대하지만 그럴 수는 없습니다. 나는 창 크기가 그에 따라 크기가 조정 되었기 때문에 두 번째 이미지가로드된다는 것을 알고 있습니다. 유일한 문제는 그것이 표시되지 않고 그 이유를 파악할 수 없다는 것입니다.
이 참조를 유지하는 중요한 이유에 대한 참조를 유지하고있다!
그런 다음
self.label.configure
를 호출하여 이미지를 변경할 수 있습니까? – Nancy@ 낸시 : 좋은 질문입니다. [PhotoImages를 참고해야하는 이유] (http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm)를 참조하십시오. – unutbu