Tkinter类中创建的图片无法显示,外部创建正常求解决
解决Tkinter中类内背景图片不显示的问题
问题根源在于Tkinter的PhotoImage对象的引用机制:如果没有被Python变量持续持有引用,它会被垃圾回收机制清理,导致图片无法渲染。你在类内定义的self.Backgroundimg虽然是实例属性,但因为main.py中只是调用Background(Master)却没把实例赋值给变量,这个实例会被立即销毁,连带self.Backgroundimg也被回收,所以图片显示不出来。
给你两种解决办法:
方法一:在主程序中保留类实例的引用
修改main.py,把Background实例赋值给一个变量,让Python持续持有它的引用:
from tkinter import * from Classes import * Master = Tk() Master.geometry("1024x768") Master.configure(background = "#000000") # 把实例存到变量里,避免被垃圾回收 bg_instance = Background(Master) Master.resizable(False, False) Master.mainloop()
方法二:给Canvas绑定图片引用(双重保险)
修改Classes.py,把图片对象额外绑定到Canvas的属性上,这样即使实例引用丢失,只要Canvas还存在,图片就不会被回收:
from tkinter import * class Background(): def __init__(self, Master): self.Window = Frame(Master) self.Window.configure(background = "#000000") self.Window.place(x = 0, y = 0, width = 1024, height = 768) self.Canvas = Canvas(master = self.Window, bg = "#000000", height = 768, width = 1024, bd = 0, highlightthickness = 0, relief = "ridge") self.Canvas.place(x = 0, y = 0) self.Backgroundimg = PhotoImage(file = f"Background/Background.png") # 把图片绑定到Canvas的属性上,增加一层引用 self.Canvas.background_img = self.Backgroundimg self.Background = self.Canvas.create_image(512.0, 384.0, image = self.Backgroundimg)
两种方法可以单独使用,也可以结合起来,确保图片不会因为引用丢失而消失。
内容的提问来源于stack exchange,提问作者xdeltaxen
相关产品推荐
相关产品推荐

