图像工作在一个按钮而不是另一个按钮

时间:2016-04-08 12:23:39

标签: python image button tkinter root

当我使用此代码在框架内的按钮内执行图像时,它可以正常工作:

image2= PhotoImage(file="questionmark.gif")
f3buttonQ=Button(f3,image=image2, command = findcustomer).place(x=425,y=10)

但是,当我只想在根框架中使用它时,我使用以下代码:

image2= PhotoImage(file="questionmark.gif")
f3buttonQ=Button(root, image=image2,command = findcustomer).place(x=450,y=110)

图像不会加载到后一段代码中,两者之间的唯一区别就是第一段中的f3。感谢。

更新

所以我设法通过使用这个命令来运行:

photo2= tk.PhotoImage(file="questionmark.gif")
button = Button(image=photo2,command = findcustomer).place(x=450,y=110)

当我单独运行时,图像完全加载到按钮上,但当我在它下面添加这一行时,它们都会再次变为空白并且图像未加载:

f3findProduct=Button(image=photo2, command = findproduct).place(x=110,y=190)

1 个答案:

答案 0 :(得分:1)

简短的故事是您的图像被垃圾收集并且不再显示。你必须保留它的参考。

来自effbot

  

将PhotoImage或其他Image对象添加到Tkinter小部件时,必须保留对图像对象的引用。如果你不这样做,   图像不会一直显示出来。

     

问题是Tkinter / Tk接口不处理引用   到图像对象正确; Tk小部件将保存对该引用的引用   内部对象,但Tkinter没有。当Python的垃圾收集器   抛弃Tkinter对象,Tkinter告诉Tk释放图像。   但由于图像由小部件使用,因此Tk不会破坏它。不   完全。它只是使图像空白,完全成像   透明...

     

解决方案是确保保留对Tkinter的引用   对象,例如通过将其附加到窗口小部件属性:

integrate(0,5,10, function(x){
 return x*x;
})

您必须为需要显示的每张图片执行此操作