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

如何在Python Tkinter类的不同方法中设置不同背景图片

解决Tkinter子窗口背景图片不显示的问题

问题原因

你在add()方法里定义的bg是局部变量,方法执行结束后,Python垃圾回收机制会清理这个变量,导致Tkinter失去图片对象的引用,背景自然无法显示。另外要注意:如果bg.png是PNG格式,Tkinter自带的PhotoImage仅支持GIF、PGM/PPM等少数格式,必须用PIL库的ImageTk.PhotoImage才能正常加载。

修复方案

1. 保留图片对象引用

把图片对象绑定到标签或窗口的属性上,避免被垃圾回收,同时统一用PIL加载图片:

def add(self):
    self.screen.destroy()
    screen=Tk()

    #destuction function
    def destruction():
        screen.destroy()
        self.__init__()

    #size and initial position of the window
    screen.geometry("1100x700+200+50")

    #colour of screen(用PIL加载PNG图片,和主窗口逻辑一致)
    bg = ImageTk.PhotoImage(Image.open("bg.png"))
    label_bgImage = Label(screen, image=bg)
    label_bgImage.bg = bg  # 将图片绑定到标签属性,防止被回收
    label_bgImage.place(x=0, y=0)

    #fix window size 
    screen.maxsize(1100,700)
    screen.minsize(1100,700)
    
    screen.mainloop()  # 启动新窗口的事件循环

2. 优化建议(可选)

不要频繁销毁重建Tk()实例,更规范的做法是用Toplevel()创建子窗口,比如把self.screen.destroy()改成self.screen.withdraw()隐藏主窗口,子窗口用Toplevel(self.screen)创建,返回时调用self.screen.deiconify()显示主窗口,这样能避免多个主循环的问题,更符合Tkinter的设计逻辑。

内容的提问来源于stack exchange,提问作者ketan ch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:35:29