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

Tkinter弹窗图片无法显示问题求助(含报错信息)

问题描述

登录后的初始界面可正常显示图片,但点击Page1按钮弹出新窗口时图片无法加载,尝试咨询老师、使用ChatGPT及查阅YouTube教程等方法均未解决,报错信息如下:

报错信息
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\ypgnv\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "G:\PYTHON!!!!!!!!!!!!!!!!\audi website\XI project.py", line 57, in Page1
    label1=tk.Label(root,image=img3)
File "C:\Users\ypgnv\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", line 3187, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
File "C:\Users\ypgnv\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", line 2601, in __init__
    self.tk.call(
_tkinter.TclError: image "pyimage4" doesn't exist
相关代码
import tkinter as tk 
from tkinter import *
from tkinter import messagebox
import tkinter.font as font
from tkinter import ttk
from PIL import Image, ImageTk
 
def CustomerScreen():
    def Page1():
        root = tk.Tk() 
        root.geometry("1000x500")
        root.title("Luxury Sedans, SUVs, Electric Vehicles & More | Audi Dubai | Audi Middle East")
        root['background'] = 'white'
        tk.Label(root, text ="Explore By Models",bg="white",fg="black",font = ("Verdana", 20)).pack()
        C = Canvas(root, bg ="white", height = 250, width = 300)
        load=Image.open("a3side.png")
        img3=ImageTk.PhotoImage(load)
        label1=tk.Label(root,image=img3)
        label1.image=img3
        label1.place(x=0,y=0)
        label1.pack()
        root.mainloop()
解决方案

问题根源是Tkinter不允许同时存在多个tk.Tk()实例——Tkinter设计上仅支持一个主窗口,新窗口需用tk.Toplevel()创建,否则会导致Tcl上下文冲突,图片资源无法正确关联。修改步骤如下:

  1. 将Page1函数中的root = tk.Tk()替换为root = tk.Toplevel(),Toplevel()会基于已存在的主窗口创建子窗口,共享同一个Tcl上下文。
  2. 移除root.mainloop(),主窗口已经运行了mainloop(),子窗口无需重复调用。

修改后的代码片段:

def CustomerScreen():
    def Page1():
        # 改用Toplevel创建子窗口
        root = tk.Toplevel() 
        root.geometry("1000x500")
        root.title("Luxury Sedans, SUVs, Electric Vehicles & More | Audi Dubai | Audi Middle East")
        root['background'] = 'white'
        tk.Label(root, text ="Explore By Models",bg="white",fg="black",font = ("Verdana", 20)).pack()
        # 原代码中Canvas变量C未使用,可选择移除或补充逻辑
        # C = Canvas(root, bg ="white", height = 250, width = 300)
        load=Image.open("a3side.png")
        img3=ImageTk.PhotoImage(load)
        label1=tk.Label(root,image=img3)
        label1.image=img3  # 保持引用避免图片被垃圾回收
        label1.place(x=0,y=0)
        label1.pack()
        # 移除重复的mainloop()调用
        # root.mainloop()

额外注意:确保Page1是通过按钮回调正确触发的,且主窗口已经完成初始化并启动了mainloop()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:23:29