本文介绍了tkinter.TclError:图像“pyimage3";不存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了在屏幕上显示图像两秒钟然后被销毁的功能的问题.当程序运行时,函数初始调用程序正常工作,但如果随后通过 tkinter 中内置的按钮调用该函数,则会出现错误.

I'm having trouble with a function that shows an image for two seconds on screen, and then is destroyed. When the program runs the functions initial call procedurely works fine, but if the function is then called via a button built in tkinter I get an error.

appcwd = os.getcwd()
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
size = str(screensize[0])+'x'+str(screensize[1])

def wlcm_scrn(event=None):
    def destroy_wlcm(event=None):
        wlcm_scrn.destroy()
    global appcwd
    global screensize
    wlcm_scrn = tkinter.Tk()
    file=appcwd+"\\Run_Files\\splash.gif"
    splsh_img = tkinter.PhotoImage(file=file)
    splosh = tkinter.Label(wlcm_scrn,image=splsh_img)
    wlcmh = splsh_img.height()/2
    wlcmw = splsh_img.width()/2
    splosh.pack()
    wlcm_scrn.config(bg='black')
    wlcm_scrn.overrideredirect(True)
    wlcm_scrn.bind("<Escape>",destroy_wlcm)
    wlxym = '+'+str(int((screensize[0]/2)-wlcmw))+'+'+str(int((screensize[1]/2)-wlcmh))
    wlcm_scrn.geometry(wlxym)
    wlcm_scrn.wm_attributes("-topmost", 1)
    wlcm_scrn.after(2000,destroy_wlcm)
    wlcm_scrn.mainloop()

wlcm_scrn() #Call through procedure.

调用函数的按钮.

view_img = tkinter.Button(cfrm,text='Show splash image',command=wlcm_scrn)

通过按钮命令调用时的错误消息.

Error message when called through button command.

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
    return self.func(*args)
  File "C:\Python33\POS_Solution\Rattle_Hum_POS.py", line 1755, in run_wlcm_scrn
    wlcm_scrn()
  File "C:\Python33\POS_Solution\Rattle_Hum_POS.py", line 34, in wlcm_scrn
    splosh = tkinter.Label(wlcm_scrn,image=splsh_img)
  File "C:\Python33\lib\tkinter\__init__.py", line 2596, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
  File "C:\Python33\lib\tkinter\__init__.py", line 2075, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: image "pyimage3" doesn't exist

什么是pyimage3",为什么它不存在?任何帮助将不胜感激.谢谢.

What is "pyimage3" and why doesn't it exist?Any help would be apprecaited. Thanks.

推荐答案

我发现了这个问题,所以我想我会为将来遇到这个问题的任何人回答我自己.

I found the issue so figured I'd answer myself for anyone who has this issue in the future.

当 wlcm_scrn 程序运行时,它是当时唯一存在的窗口,因此它可以使用 tkinter.Tk().出现错误是因为调用该函数的按钮本身位于也以 Tkinter.Tk() 运行的活动窗口中.因此,当 Python/Tkinter 尝试从按钮构建 wlcm_scrn 时,它本质上是尝试在 root 下创建两个窗口并摔倒.

When the wlcm_scrn runs procedurely it is the only window that exists at that point in time, and so it can use tkinter.Tk(). The error arises because the button that calls the function is itself sitting in an active window that is also running as Tkinter.Tk(). So when Python/Tkinter tries to build wlcm_scrn from the button, it's essentially trying to create two windows under root and falling over.

解决办法:

换行...

wlcm_scrn = tkinter.Tk()

这...

wlcm_scrn = tkinter.Toplevel()

...停止错误,并显示图像.

...stops the error, and the image shows.

我个人将拥有该函数的两个实例.一种在 Tk() 下按程序调用,另一种在 TopLevel() 下在应用程序内调用.

I personally am going to have two instances of the function. One called procedurely under Tk(), and one called within the application under TopLevel().

这篇关于tkinter.TclError:图像“pyimage3";不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-04 23:43