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

Tkinter使用Canvas创建背景图后新窗口所有控件消失问题求助

问题原因
  • 图片对象引用丢失:selectname函数内定义的lobby属于局部变量,函数执行完成后就会被Python垃圾回收机制销毁,Tkinter不会主动持有图片对象的引用,导致canvas背景图失效,进一步干扰同窗口下其他控件的渲染。
  • 多主窗口实例冲突:Tkinter程序只允许存在一个主Tk()实例,你在子窗口中再次调用Tk()会导致资源上下文、消息循环混乱,也会触发控件渲染异常的问题。
解决方法

按照以下两个步骤修改代码即可修复问题:

  1. 子窗口改用Toplevel()实例化,不要重复创建Tk()实例
  2. 给子窗口的图片对象添加持久引用,比如绑定到canvas组件的自定义属性上,避免被垃圾回收

修改后的selectname函数代码示例:

def selectname():
    # 改用Toplevel创建子窗口,不要重复实例化Tk
    mainmenu = Toplevel()
    mainmenu.title("PROF NAME")
    mainmenu.geometry("1200x600")

    lobby = ImageTk.PhotoImage(Image.open("CAU_310_MAP/Pictures/lobby.png"))
    
    canvas = Canvas(mainmenu, width = 1200, height = 600)
    canvas.pack(fill='both', expand = True)
    
    canvas.create_image(0, 0, image=lobby,anchor = "nw")
    # 给canvas添加自定义属性持有图片引用,避免被垃圾回收
    canvas.lobby_img = lobby
    canvas.create_text(600, 75, text = '편의시설을 선택해주세요', font='Arial 30')
    
    btnCAUburger=Button(mainmenu, padx=3, pady=3, text="카우버거", font="Arial 30 bold")
    btnTouslesjours=Button(mainmenu, padx=3, pady=3, text="뚜레쥬르", font="Arial 30 bold")
    btnMorningGlory=Button(mainmenu, padx=3, pady=3, text="모닝글로리", font="Arial 30 bold")
    btnPostOffice=Button(mainmenu, padx=3, pady=3, text="우체국", font="Arial 30 bold")
    btnHairNu=Button(mainmenu, padx=3, pady=3, text="헤어누", font="Arial 30 bold")
    btnSevenEleven=Button(mainmenu, padx=3, pady=3, text="세븐일레븐", font="Arial 30 bold")
    btnCanon=Button(mainmenu, padx=3, pady=3, text="캐논", font="Arial 30 bold")
    btn310Ricenoodle=Button(mainmenu, padx=3, pady=3, text="310쌀국수", font="Arial 30 bold")

    btnCAUburger.place(x=150, y=180)
    btnTouslesjours.place(x=370, y=180)
    btnMorningGlory.place(x=590, y=180)
    btnPostOffice.place(x=850, y=180)
    btnHairNu.place(x=160, y=360)
    btnSevenEleven.place(x=350, y=360)
    btnCanon.place(x=620, y=360)
    btn310Ricenoodle.place(x=780, y=360)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:18:03