如何在 Tkinter 中使用 Canvas 插入图像?

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 编程的新手,请帮助我。

Wil*_*ing 8

这里可能的问题是图像被 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 小部件显示该图像,该图像也会被清除。

为了避免这种情况,程序必须保留对图像对象的额外引用。一种简单的方法是将图像分配给小部件属性,如下所示:

label = Label(image=photo) 
label.image = photo # keep a reference!
label.pack()
Run Code Online (Sandbox Code Playgroud)