파이썬 팁

파이썬 TKinter 라이브러리 - pyimage doesn't exist 오류 해결방법 - 여러 창에 이미지 넣기!

gomming 2020. 9. 26. 00:11

오늘 소개드릴 내용은 TKinter라는 Python GUI 프로그래밍 라이브러리에 있는 이미지 기능이에요 !

 

기본 기능을 배워가면서 UI를 만들다보면 라벨은 글자 버튼은 네모 엔트리 네모 텍스트창도 네모.... 너무 단조로운데요

 

이미지를 넣을 수 있으면 배경도 사진으로 예쁘게 꾸미고 아이콘도 귀여운걸로 해볼 수 있겠죠 ! .!

 

그럼 아주 아주 간단한 예제로 실행해 보도록 하겠습니다.

import tkinter
from tkinter import *

root = tkinter.Tk()

img=tkinter.PhotoImage(file="C:/Users/Roha/Downloads/cat.gif")

lbl = Label(root, text="Reboot")
lbl.pack()
txt = Entry(root)
txt.pack()

btn = Button(root, image=img)
btn.pack()
root.geometry('500x400+400+500')
root.mainloop()

이렇게 PhotoImage 라는 기능을 이용하면 이미지를

라벨이나 버튼에 넣어줄 수 있답니다.

 

애옹이가 인사를 하고 있네요 

애옹이 이미지는 버튼에 적용해 놓았기 때문에 버튼을 누르면 어떠한 기능이 작동하도록 할 수 있어요 !. !

저는 새로운 애옹이 창이 뜨도록 해봤어요

import tkinter
from tkinter import *

root = Tk()


def aws():
        aw = Tk()
        lbl = Label(aw, text="Reboot")
        lbl.pack()
        txt = Entry(aw)
        txt.pack()
        btn = Button(aw,image=img)
        btn.pack()
        
        aw.geometry('500x400+400+300')
        aw.mainloop()

img=tkinter.PhotoImage(file="C:/Users/Roha/Downloads/cat.gif")


lbl = Label(root, text="Reboot")
lbl.pack()
txt = Entry(root)
txt.pack()
btn = Button(root, image=img, command =aws)

btn.pack()
root.geometry('500x400+400+500')
root.mainloop()

 

완전히 같은 구성으로 다른 위치에 새창을 띄우도록 작성한 코드에요. 정상적으로 작동한다면 새창에서 애옹이가 안녕 인사해야 할텐데요

 

image "pyimage1" doesn't exist

이런 오류가 발생 되는것 볼 수 있습니다.

image "pyimage1" doesn't exist

 

그냥 인터넷으로 튜토리얼 찾아보면서 하신 분들은 여기서 엄청 고뇌에 빠지실 수 있어요.

(걍 다른 라이브러리로 갈아탈까 하면서 ...)

 

이미지가 전역변수로 되있어서 그런걸까하고

지역 변수로 이미지를 정의해도 같은 에러가 나타날 겁니다.

 

TKinter는 메인 창이 아닌 새창을 띄우면 이미지 적용할 때 반드시 master 정의를 해줘야 해요 ! .! 이 이미지는 어떤 창에 적용할 이미지이다 하고 미리 정해 주는 거죠

import tkinter
from tkinter import *

root = Tk()

def aws():
        aw = Tk()
        lbl = Label(aw, text="Reboot")
        lbl.pack()
        txt = Entry(aw)
        txt.pack()
        img=tkinter.PhotoImage(file="C:/Users/Roha/Downloads/cat.gif", master=aw)
        btn = Button(aw,image=img1)
        btn.pack()
        aw.geometry('500x400+400+300')
        aw.mainloop()

img=tkinter.PhotoImage(file="C:/Users/Roha/Downloads/cat.gif")
lbl = Label(root, text="Reboot")
lbl.pack()
txt = Entry(root)
txt.pack()
btn = Button(root, image=img, command =aws)
btn.pack()

root.geometry('500x400+400+500')
root.mainloop()

 

img=tkinter.PhotoImage(file="C:/Users/Roha/Downloads/cat.gif", master=aw)

 

이렇게 변수에 master=창이름 추가해주면

새창에서도 이미지가 정상적으로 나타난 답니다.

 

결과를 볼게요 !

애옹이를 클릭하니 애옹이창이 하나 더 나타났습니다. 

이런 문제 있으셨던 분이 있었다면 도움이 되셨길 바랍니다.

 

그럼 모두들 즐코딩 ! .! 하세욤

 

 

#python #tkinter #PhotoImage #button #애옹 #새창만들기

#pyimage #doesntexist #에러메세지 #command

#Entry #pack #geometry #mainloop

#파이썬GUI #프로그래밍 #master