[tkinter] 그림파일 출력 방법

2020년 08월 27일 by 진아사랑해

    [tkinter] 그림파일 출력 방법 목차
반응형

1. PIL module이 없다고 나오면 아래 명령으로 설치한다

   pip install pillow

 

2. pyimage1 doesn't exist 메세지가 나옴

   tk.Tk ()를 다시 호출하여 코드에 2 개 이상의 창이 만들어지면 이런 메시지가 나온다

   문제는 모든 변수가 기본적으로 첫 번째 루트 창에 연결되고 두 번째 창에서는 사용할 수 없다는 것이다.

  적절한 수정은 tk.Tk ()로 호출되는 메인 윈도우를 가지도록 코드를 구조화하고

   다른 모든 윈도우는 tk.Toplevel로 시작하는 것이다.

   어떤 프로그램도 tk.Tk ()를 두 번 이상 호출해서는 안된다

    빠른 수정은 PhotoImage에 출력을 원하는 마스터(창 이름)를 제공하는 것입니다.

    예) photo = ImageTk.PhotoImage(img, master=self.c)

 

3. Window(창) 위에 또다른 창을 열고 싶은 경우

    tk.Tk() => 기본 창을 열고

    tk.Toplevel() => 또 다른 창을 연다

 

4. 사진 출력을 위해 

1) import Tkinter as tk

    image=tkinter.PhotoImage(file="images/10_image.png")

    label=tkinter.Label(window, image=image)

    label.pack()   

    => gif, png 화일만 지원된다

2) from PIL import Image, ImageTk

    img = ImageTk.PhotoImage(Image.open('foo.png')) 

 

5. 사진이 출력되지 않는다

class StartPage(tk.Frame):

    def __init__(selfmaster):

        tk.Frame.__init__(self, master)

        canv = tk.Canvas(selfwidth=180height=180bg='white')

        canv.pack(side='bottom')

        img = ImageTk.PhotoImage(Image.open("images/a.png"))

        canv.create_image(20,20anchor="nw"image=img)

   => 왜 이럴까 ?

class StartPage(tk.Frame):

    def __init__(selfmaster):

   canv = tk.Canvas(selfwidth=180height=180bg='white')

   canv.pack(side='bottom')

  self.img = ImageTk.PhotoImage(Image.open("images/a.png"))

     canv.create_image(20,20anchor="nw"image=self.img)

  => 차이점은 self.img 이다.

       class 선언의 _init_ 가 종료되면 로컬 변수는 삭제된다.

       이미지에 대한 데이터는 로컬변수로 저장됨으로 저장하여야 하며

       저장 방법은 이미지 변수를 전역변수로 선언 또는 위처럼 self. 를 붙이는 것이다

 

 

반응형