2014-03-05 3 views
1

안녕하세요. 내 버튼 중 하나에 배경으로 이미지를 넣으려고합니다. 이미 기본 창에서 다른 버튼을 많이 사용했지만이 특정 버튼은 최상위 창 내부에 있습니다. 이미지를로드하지 않아도됩니다. 왜 그런지 알 수 있습니까? (나는 또한 버튼의 폭과 높이를 정의하는 시도하지만 여전히 이미지가 표시되지 않습니다) 프로그램의 나머지 부분이 어떻게 구성되어 있는지에 따라tkinter 버튼이 이미지를 표시하지 않습니다.

def rec_window(): 
    recw = Toplevel(width=500,height=500) 
    recw.title('Record To.....') 
    img1 = PhotoImage(file="C:/Users/Josh Bailey/Desktop/pi_dmx/Gif/mainmenu.gif") 
    Button(recw, image=img1, command=rec_preset_1).grid(row=1, column=1) 
    Button(recw, text="Preset 2", bg = 'grey70',width=40, height=12,command=rec_preset_2).grid(row=1, column=2) 
    Button(recw, text="Preset 3", bg = 'grey70',width=40, height=12,command=rec_preset_3).grid(row=2, column=1) 
    Button(recw, text="Preset 4", bg = 'grey70',width=40, height=12,command=rec_preset_4).grid(row=2, column=2) 
    Button(recw, text="Cancel", bg='grey70', width=20, height=6, command=recw.destroy). grid(row=3,column=1,columnspan=2, pady=30) 

답변

2

이 이미지가 garbage-에 의해 삭제하기 수 있습니다 수집 :

http://effbot.org/tkinterbook/photoimage.htm에서은 (로컬 변수에 이미지를 저장하는 기능에서 돌아올 때 는 예를 들어) 가비지 수집 파이썬, 이미지가 삭제되는 광 화상의 객체가 될 때 비록 그것이 Tkinter를 위젯으로 표시되는 s의.

이 문제를 방지하려면 프로그램에서 이미지 개체에 대한 추가 참조를 유지해야합니다. 이 작업을 수행하는 간단한 방법은 다음과 같이 위젯 속성에 이미지를 지정하는 것입니다 : 귀하의 경우

label = Label(image=photo) 
label.image = photo # keep a reference! 
label.pack() 

, 당신은 참조를 유지하기 위해 전역 변수로 img1로 선언하여 기능을 시작할 수 있습니다 : 이미 다른 프로그램에서 img1로있는 경우

global img1 

가 나 :

img1 = PhotoImage(file="C:/Users/Josh Bailey/Desktop/pi_dmx/Gif/mainmenu.gif") 
img1Btn = Button(recw, image=img1, command=rec_preset_1) 
img1Btn.image = img1 
img1Btn.grid(row=1, column=1) 
+0

[여기]이에 대해 아무것도 (http://www.tkdocs.com을 없다 /tutorial/widgets.html) 또는 [here] (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Button.html)를 클릭하면 아이콘이 나타나지 않는 이유가 바로 내 애플 리케이션의 버튼에 - 너무 많이 감사합니다. –

관련 문제