如何将图像添加到窗口小部件?为什么图像不显示?

use*_*421 4 python image tkinter

如何将图像添加到tkinter中的窗口小部件?

为什么当我使用此代码时,它不起作用:

some_widget.config(image=PhotoImage(file="test.png"), compound=RIGHT)
Run Code Online (Sandbox Code Playgroud)

但这确实有效吗?:

an_image=PhotoImage(file="test.png")
some_widget.config(image=anImage, compound=RIGHT)
Run Code Online (Sandbox Code Playgroud)

Pyt*_*sta 7

当您尝试在第一个版本中使用它时,您的图像将被收集垃圾.

effbot很古老,但这里的代码是好的:

您必须在Python程序中保留对图像对象的引用,方法是将其存储在全局变量中,或者将其附加到另一个对象.

在第二个版本中,图像在全局级别声明.

这是另一个展示这个问题的例子,你希望它也可以工作,毕竟它只是在函数中的相同代码

不起作用:

import tkinter as tk
from PIL import ImageTk

root = tk.Tk()
def make_button():
    b = tk.Button(root)
    image = ImageTk.PhotoImage(file="1.png")
    b.config(image=image)
    b.pack()
make_button()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

工作:

import tkiner as tk
from PIL import ImageTk

root = tk.Tk()
def make_button():
    b = tk.Button(root)
    image = ImageTk.PhotoImage(file="1.png")
    b.config(image=image)
    b.image = image
    b.pack()
make_button()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

为什么?变量make_button是该函数的本地变量.如果你在类中遇到这种类型的问题,同样的想法.