我在使用Tkinter的python 2.7中有一个flashcards测验游戏。一般的想法是显示一个没有答案的问题,然后添加答案的显示,然后放置一个新问题并删除答案,并重复...有时问题的答案是图像,有时它是文字。我希望能够在显示任何内容,显示图像,不显示任何内容和显示文本之间切换。仅显示图像,或仅显示文本,或文本后的图像正常工作。它显示的图像不适用于我。
以下是我的代码的相关部分(乳胶字符串转换为图像):
self.answer = tk.Label(master, text = '')
self.answer.pack()
# stuff stuff stuff
qtxt = self.last_question['A']
if self.last_question['type'] == 'flash-latex':
sympy.preview(qtxt, viewer='file', filename='qtemp.jpg', euler=False)
image = Image.open('qtemp.jpg')
photo = ImageTk.PhotoImage(image)
self.answer.image = photo
self.answer.config(image = photo)
self.answer.pack()
else:
self.answer.config(text = qtxt)
master = Tk()
。
如果我尝试在图像后显示文本,我得到的错误是:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1486, in __call__
return self.func(*args)
File "game.py", line 65, in next_frame
self.answer.config(image = None, text = qtxt)
File "/usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1271, in configure
return self._configure('configure', cnf, kw)
File "/usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1262, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: image "pyimage1" doesn't exist
以下是我的完整代码:http://pastebin.com/raw/SdS2fRHJ
请注意,在SO上出现类似错误消息的一些问题有多个Tk()
次调用,但这不是这种情况。
我正在使用self.label_instance.config(opts)
而不是创建新的tk.Label
,因为我不希望窗口中的元素四处移动。
P.S。我怀疑某些对图像的引用需要删除,或者过早擦除,但我不确定......
p.p.s。我可以通过从不尝试在图像之后显示文本来解决问题,即通过具有两个用于答案的标签,一个用于图像,一个用于文本,并且在不需要图像时显示空白图像。但是,我很好奇这个问题是否真的可以解决(使用相同的标签来显示图像,然后是文本,然后是图像等),或者如果我的解决方法是干净利落的话。