按钮上的图像

时间:2010-11-28 17:12:53

标签: python image button tkinter

我希望下面两个脚本都有相同的输出。

但是当我执行脚本1 时,我没有在按钮上获得图像。但是,脚本2 效果很好。

脚本1

from Tkinter import *
  class fe:
    def __init__(self,master):
      self.b=Button(master,justify = LEFT)
      photo=PhotoImage(file="mine32.gif")
      self.b.config(image=photo,width="10",height="10")
      self.b.pack(side=LEFT)
root = Tk()
front_end=fe(root)
root.mainloop()

脚本2

from Tkinter import *
root=Tk()
b=Button(root,justify = LEFT)
photo=PhotoImage(file="mine32.gif")
b.config(image=photo,width="10",height="10")
b.pack(side=LEFT)
root.mainloop()

5 个答案:

答案 0 :(得分:20)

对图像对象的唯一引用是局部变量。当__init__退出时,局部变量被垃圾收集,因此图像no被销毁。在第二个示例中,因为图像是在全局级别创建的,所以它永远不会超出范围,因此永远不会被垃圾回收。

要解决此问题,请保存对图像的引用。例如,代替photo使用self.photo

答案 1 :(得分:0)

它的工作

x1=Button(root)
photo=PhotoImage(file="Re.png")
x1.config(image=photo,width="40",height="40",activebackground="black"
,bg="black", bd=0,command=sil)
x1.place(relx=1,x=5, y=-5, anchor=NE)

但这没用了

def r():
    x1=Button(root)
    photo=PhotoImage(file="Re.png")
    x1.config(image=photo,width="40",height="40",activebackground="black",
    bg="black", bd=0,command=sil)
    x1.place(relx=1,x=5, y=-5, anchor=NE)

r()

答案 2 :(得分:0)

logo = PhotoImage(file = 'mine32.gif')
small_logo = logo.subsample(5, 5)
self.b.config(image = small_logo , compound = LEFT )

答案 3 :(得分:0)

从tkinter导入*

root= Tk()

btnPlay = Button(root)
btnPlay.config(image=imgPlay, width="30", height="30")
btnPlay.grid(row=0, column=0)

root.mainloop()

答案 4 :(得分:0)

无关的答案,但这是我第一次来这里时一直在寻找的答案。在将图像添加到按钮之前,使用它来调整图像的大小。

from PIL import Image, ImageTk

image = Image.open("path/to/image.png")
image = image.resize((25, 25), Image.ANTIALIAS)
self.reset_img = ImageTk.PhotoImage(image)
self.button = tk.Button(frame, image=self.reset_img)