我有一个 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()
当您运行上面的代码时,它应该打开三个窗口。一为根,有文可说。还有两个顶层。我期望的是两个窗口应该有一个图像,一个有文本(根)。然而实际发生的情况是,一个有文本,一个有图像(这是硬编码的),一个没有图像(运行该函数的那个)。
为了确保
GUI
实例不被垃圾回收,您可以将引用保留在全局列表中:
guis = []
# Open the GUI with a FUNCTION --> image doesn't open
def open_GUI():
guis.append(GUI())