복붙노트

[PYTHON] Tkinter에 이미지를 표시 할 수 없음 [duplicate]

PYTHON

Tkinter에 이미지를 표시 할 수 없음 [duplicate]

프로그램을 실행할 때 캔버스가 나타나지만 이미지는 나타나지 않습니다.

canvas = Canvas(frame, width = 128, height = 128, bg= 'white')
    image_data = Image.open('NoArt.gif')
    ppm_f = ImageTk.PhotoImage(image_data)
    canvas.create_image(0, 0, image = ppm_f, anchor = NW)
    canvas.pack(side=BOTTOM)

어떤 아이디어 ??

추신.

나는 가지고있다 PIL 버전 1.6, 파이썬 2.6, 파이썬 2.6과 함께 제공되는 Tkinter의 버전

해결법

  1. ==============================

    1.좋아, 내가 알아 냈어. 분명히 파이썬이 쓰레기 처리를 처리하는 방식으로 인해 사진이 지워집니다. 전역 범위의 이미지에 대한 참조가 필요합니다. 이것은 결국 결국 사용하는 작업 코드입니다.

    좋아, 내가 알아 냈어. 분명히 파이썬이 쓰레기 처리를 처리하는 방식으로 인해 사진이 지워집니다. 전역 범위의 이미지에 대한 참조가 필요합니다. 이것은 결국 결국 사용하는 작업 코드입니다.

    self.photo = PhotoImage(file="noart.ppm")
        self.Artwork = Label(self.frame, image=self.photo)
        self.Artwork.photo = self.photo
        self.Artwork.pack()
    

    그 self.Artwork.photo = self.photo는 중요한 부분입니다. 이미지가 표시됩니다.

  2. ==============================

    2.다른 누구도 비슷한 문제가 발생하면 하드 코드 된 솔루션을 사용해보십시오.

    다른 누구도 비슷한 문제가 발생하면 하드 코드 된 솔루션을 사용해보십시오.

    import Image
    import Tkinter as tk
    
    def cleanhex(x):
        return str(hex(x))[-2:]
    
    def renderimage(target,data,w,h):
        canvas = tk.Canvas(target,width=w,height=h)
        canvas.pack()
        for x in range(w):
            for y in range(h):
                c = "#" + cleanhex(data[x,y][0]) + cleanhex(data[x,y][1]) + cleanhex(data[x,y][2])
                canvas.create_line(x,y,x+1,y+1,fill=c)
    
    im = Image.open("whatever.whatever")
    renderimage(root,im.load(),im.size[0],im.size[1])
    
  3. ==============================

    3.이 답변과이 인기있는 질문 및 답변에서 언급 한 바와 같이 effbot.page

    이 답변과이 인기있는 질문 및 답변에서 언급 한 바와 같이 effbot.page

    예를 들어 전역 범위에서 선언되지 않았으므로 아래 코드의 이미지를 참조하십시오.

    import tkinter as tk
    
    root = tk.Tk()
    
    def show_image():
        img_label = tk.Label(root)
        image = tk.PhotoImage(file="test.png")
        img_label['image'] = image
    
        img_label.pack()
    
    
    show_image()
    root.mainloop()
    

    아래 예제에서 img_label.image는 전역 적으로이 예에서 img_label에 첨부 된 속성으로 선언됩니다.

    import tkinter as tk
    
    root = tk.Tk()
    
    def show_image():
        img_label = tk.Label(root)
        img_label.image = tk.PhotoImage(file="test.png")
        img_label['image'] = img_label.image
    
        img_label.pack()
    
    
    show_image()
    root.mainloop()
    

    img_label이 전역 적으로 선언되지 않았기 때문에 여전히 이상하게 보입니다. 덜 혼란스러운 방법은 전역 이미지를 show_image의 첫 번째 라인으로 추가하는 것입니다.

  4. from https://stackoverflow.com/questions/3359717/cannot-display-an-image-in-tkinter by cc-by-sa and MIT license