2013-07-23 3 views
1

버튼을 클릭하면 새로운 최상위 창이 열리고 버튼 이미지가 표시되는 작은 GUI 애플리케이션을 작성합니다.최상위 창에 이미지 버튼 추가 Tkinter

루트 버튼에서는 이미지 버튼을 사용할 수 있지만 최상위 창에서는 사용할 수 없습니다. 블랙 박스 만 나타납니다.

두 창 모두에 일반 단추가 있으며 작동합니다.

저는 Python을 처음 사용합니다.

import Tkinter 
from Tkinter import * 
from PIL import ImageTk, Image 

root = Tkinter.Tk() 

root.title("First Window")     
root.configure(background = "black")  

def new_window(): 
    win2 = Toplevel(root) 
    win2.geometry("650x350+50+40")   
    win2.title("Second Window!")    
    win2.configure(background = "white")  

    def close1(): 
     win2.destroy() 

    img1 = ImageTk.PhotoImage(Image.open("./images/close.gif")) 
    c1 = Button(win2, image = img1, bg ="black", command = close1) 
    c1.grid(row = 1) 

    c2= Tkinter.Button(win2, text='close', command = close1) 
    c2.grid(row = 2)  


nw = Tkinter.Button(root, text = 'New Window' , command = new_window) 
nw.grid(row = 1) 

def close3(): 
    root.destroy() 

img3 = ImageTk.PhotoImage(Image.open("./images/close.gif")) 
c3 = Button(root, image = img3, bg ="black", command = close3) 
c3.grid(row = 2) 


root.mainloop() 

답변

2

새로운 최상위 레벨을 만들면 로컬 변수를 사용하여 이미지를 참조하게됩니다. 이 때문에 메소드가 종료되면 가비지 컬렉터가 이미지를 삭제합니다.

img1 = ImageTk.PhotoImage(...) 
c1 = Button(...) 
c1.image = img1 
: 당신은 전역 변수에 대한 참조, 또는

에 대한 참조를 저장하는 일반적인 방법은 그것을 버튼의 속성을 확인하는 것입니다 가비지 컬렉터로부터 보호하기 위해 다른 방법을 저장해야