tkinter按钮不显示图像

时间:2014-03-05 14:04:10

标签: image button 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)

1 个答案:

答案 0 :(得分:5)

根据程序其余部分的结构,您的图像可能会被垃圾收集清除:

来自http://effbot.org/tkinterbook/photoimage.htm

  

注意:当Python对垃圾收集PhotoImage对象时(例如   当您从在本地存储图像的函数返回时   变量),即使正在显示图像,图像也会被清除   Tkinter小部件。

     

为避免这种情况,程序必须对图像保留额外的引用   宾语。一种简单的方法是将图像分配给窗口小部件   属性,像这样:

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

在您的情况下,您可以通过将img1声明为全局变量来保留引用来启动您的函数:

global img1

或者,如果您的程序中已经有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)