Ayu*_*hra 2 python tkinter tkinter-canvas
我正在尝试使用 tkinter 中的 Canvas 在我的 python 应用程序中插入图像。相同的代码是:
class Welcomepage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
canvas = tk.Canvas(self, width = 1000, height = 1000, bg = 'blue')
canvas.pack(expand = tk.YES, fill = tk.BOTH)
image = tk.PhotoImage(file="ice_mix.gif")
canvas.create_image(480, 258, image = image, anchor = tk.NW)
Run Code Online (Sandbox Code Playgroud)
图像正在从源读取,但仍未显示在框架中。我是 GUI 编程的新手,请帮助我。
这里可能的问题是图像被 Python 垃圾收集,因此没有显示 - 这就是@nae 的评论所暗示的。将它附加到self引用将阻止它被垃圾收集。
self.image = tk.PhotoImage(file="ice_mix.gif") # Use self.image
canvas.create_image(480, 258, image = self.image, anchor = tk.NW)
Run Code Online (Sandbox Code Playgroud)
effbot.org 上的Tkinter Book解释了这一点:
注意:当 Python 对 PhotoImage 对象进行垃圾收集时(例如,当您从将图像存储在局部变量中的函数返回时),即使 Tkinter 小部件显示该图像,该图像也会被清除。
为了避免这种情况,程序必须保留对图像对象的额外引用。一种简单的方法是将图像分配给小部件属性,如下所示:
Run Code Online (Sandbox Code Playgroud)label = Label(image=photo) label.image = photo # keep a reference! label.pack()