tkinter 图像未在函数中打开

问题描述 投票:0回答:1

我有一个 GUI 类,当您运行它时,它应该打开一个顶级 tkinter 窗口,其中包含图像。当您简单地使用

test = GUI()
运行该类时,这是有效的,但是当您在函数内运行该类时,图像将拒绝加载。

免责声明:如果您运行下面的代码,您需要拥有自己的图像和图像路径

import tkinter as tk
from PIL import Image,ImageTk

#GUI CLASS
class GUI:
    def __init__(self):
        self.toplevel = tk.Toplevel()
        
        self.img = ImageTk.PhotoImage(Image.open(IMAGE_PATH))
        self.img_label = tk.Label(self.toplevel,image=self.img)
        self.img_label.place(x=0,y=0)

#open the gui with a FUNCTION --> image doesn't open
def open_GUI():
    test = GUI()

#root window
root = tk.Tk()
tk.Label(root,text="This is the root").pack()

#tests
test = GUI()
open_GUI()

root.mainloop()

当您运行上面的代码时,它应该打开三个窗口。一为根,有文可说。还有两个顶层。我期望的是两个窗口应该有一个图像,一个有文本(根)。然而实际发生的情况是,一个有文本,一个有图像(这是硬编码的),一个没有图像(运行该函数的那个)。

python function tkinter python-imaging-library
1个回答
0
投票

为了确保

GUI
实例不被垃圾回收,您可以将引用保留在全局列表中:

guis = []

# Open the GUI with a FUNCTION --> image doesn't open
def open_GUI():
    guis.append(GUI())
© www.soinside.com 2019 - 2024. All rights reserved.