det*_*lly 0 python tkinter imagebutton ttk python-3.5
我在使用Python(3.5)中的ttk / tkinter搞砸了,而按钮也遇到了一些问题(特别是ttk.Button)。
无论我尝试什么,都无法终生获得图像显示在按钮上。
我有以下代码:
from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk
class Example(ttk.Frame):
def __init__(self, master):
ttk.Frame.__init__(self, master)
master.title('Button Test')
self.configure(padding='10 10 10 10')
self.grid(column=0, row=0, sticky=(N, E, W, S))
buttonImage = Image.open('play.png')
buttonPhoto = ImageTk.PhotoImage(buttonImage)
myButton = ttk.Button(self, image=buttonPhoto, padding='10 10 10 10')
myButton.grid(column=1, row=1, sticky=(E, W))
if __name__ == "__main__":
root = Tk()
example = Example(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
这是我在此处,此处以及在StackOverflow上的用户中找到的示例的组合。
预先感谢您的任何想法/见解。
-西恩
PhotoImage
garbage collector
如果将图像分配给局部变量,则会出现删除图像的问题。
将图像分配给类变量 self.buttonPhoto
self.buttonPhoto = ImageTk.PhotoImage(buttonImage)
Run Code Online (Sandbox Code Playgroud)
充分:
from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk
class Example(ttk.Frame):
def __init__(self, master):
ttk.Frame.__init__(self, master)
master.title('Button Test')
self.configure(padding='10 10 10 10')
self.grid(column=0, row=0, sticky=(N, E, W, S))
buttonImage = Image.open('play.png')
# use self.buttonPhoto
self.buttonPhoto = ImageTk.PhotoImage(buttonImage)
# use self.buttonPhoto
myButton = ttk.Button(self, image=self.buttonPhoto, padding='10 10 10 10')
myButton.grid(column=1, row=1, sticky=(E, W))
if __name__ == "__main__":
root = Tk()
example = Example(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
或将图像分配给其他对象-它也应该停止garbage collector
。
即。
myButton.image = buttonPhoto
Run Code Online (Sandbox Code Playgroud)
充分:
from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk
class Example(ttk.Frame):
def __init__(self, master):
ttk.Frame.__init__(self, master)
master.title('Button Test')
self.configure(padding='10 10 10 10')
self.grid(column=0, row=0, sticky=(N, E, W, S))
buttonImage = Image.open('tplay.png')
buttonPhoto = ImageTk.PhotoImage(buttonImage)
myButton = ttk.Button(self, image=buttonPhoto, padding='10 10 10 10')
myButton.grid(column=1, row=1, sticky=(E, W))
# assign image to other object
myButton.image = buttonPhoto
if __name__ == "__main__":
root = Tk()
example = Example(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
请参阅Note
页面结尾处的Tkinter PhotoImage类