我会显示代码的缩小部分,这会给我一个问题。
_tkinter.TclError: image "pyimageN" doesn't exist
- 其中N代表1,2,3等......
第一堂课在背景中显示使用图片的菜单。
class MenuWindow(): #in this class we show the main part of the program
def __init__(self):
self.Menu=Tk()
self.MCanvas=Canvas(self.Menu)
self.MCanvas.bind("<ButtonPress-1>",self.MenuClick)
#unuseful lines that configure the window and the canvas#
self.Background=PhotoImage(height=600,width=700)#a simple tkinter.PhotoImage object
#other unuseful lines that draw the photoimage ( without reading any file, with the method put())#
self.MCanvas.create_image((x,y),image=self.Background,state="normal")
#unuseful lines that continue the drawing of the canvas#
第二个类显示另一个窗口,在后台使用另一个图像。这个类是由第一个类通过函数self.MenuClick。
的点击绑定启动的class EditorWindow(): #in this class we show the main part of the program
def __init__(self):
self.Eenu=Tk()
self.ECanvas=Canvas(self.Eenu)
#unuseful lines that configure the window and the canvas#
self.Background=PhotoImage(height=600,width=700)
#other unuseful lines that draw the photoimage ( without reading any file , with the method put() )#
self.ECanvas.create_image((x,y),image=self.Background,state="normal")#in this line i get the error
#unuseful lines that continue the drawing of the canvas#
完成回溯如下:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/__init__.py", line 1399, in __call__
return self.func(*args)
File "/Users/albertoperrella/Desktop/slay.py", line 70, in MenuClick
EditorWindow(self)
File "/Users/albertoperrella/Desktop/slay.py", line 85, in __init__
self.ECanvas.create_image((3,3),image=self.Background,state="normal",anchor="nw")
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/__init__.py", line 2140, in create_image
return self._create('image', args, kw)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/tkinter/__init__.py", line 2131, in _create
*(args + self._options(cnf, kw))))
_tkinter.TclError: image "pyimage2" doesn't exist
这两个类是以类似的方式制作的,所以我不知道为什么我得到第二个错误。我确信这不是写错误,例如(构造而不是构造),并且我正在使用的图像实际存在。
所以我认为:
我犯了一些概念错误,
或者它是python中的一个bug(或Tkinter的微妙行为)。
答案 0 :(得分:5)
我解决了自己的问题:
我定义的第二个类是问题,因为它使用另一个根窗口,别名Tk()。相当于普通的Tk()窗口是Toplevel(),它与root相同但没有自己的翻译背景。
很快,为了解决这个问题,我必须从
更改EditorWindow类的 init ()方法的fisrt行。 self.Eenu=Tk()
到
self.Eenu=Toplevel()