You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:15:34