- [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__(self, master):
tk.Frame.__init__(self, master)
canv = tk.Canvas(self, width=180, height=180, bg='white')
canv.pack(side='bottom')
img = ImageTk.PhotoImage(Image.open("images/a.png"))
canv.create_image(20,20, anchor="nw", image=img)
=> 왜 이럴까 ?
class StartPage(tk.Frame):
def __init__(self, master):
canv = tk.Canvas(self, width=180, height=180, bg='white')
canv.pack(side='bottom')
self.img = ImageTk.PhotoImage(Image.open("images/a.png"))
canv.create_image(20,20, anchor="nw", image=self.img)
=> 차이점은 self.img 이다.
class 선언의 _init_ 가 종료되면 로컬 변수는 삭제된다.
이미지에 대한 데이터는 로컬변수로 저장됨으로 저장하여야 하며
저장 방법은 이미지 변수를 전역변수로 선언 또는 위처럼 self. 를 붙이는 것이다
'python & 라즈베리파이' 카테고리의 다른 글
[Tkinter] 화면 전환 (0) | 2020.09.10 |
---|---|
[Python] Tkinter의 Canvas 사용 (0) | 2020.08.27 |
[tkinter] Button 및 Button Event 처리 (0) | 2020.08.25 |
[Tkinter] Listbox 사용법 (0) | 2020.08.25 |
[python] 터미날 수신 Byte 코드 변환 및 \n 제거 (0) | 2020.08.24 |