尝试添加功能类似于按钮的图像,但弹出此错误,图像“ pyimage2”不存在

时间:2019-04-30 00:08:16

标签: python-3.x tkinter tkinter-canvas ttk

我已经有一组代码,其格式与以下代码类似,并且似乎可以正常工作。但是不知何故,此图片并未弹出。它们与代码位于同一文件夹中。 Def small是使图像起作用的代码,而def strips是给我一个错误的代码。

from tkinter import *
import tkinter as tk
from tkinter import ttk

def small():
    s = Tk()
    s.title('Small Preset Shirt (Not fit to scale)')
    canvas = Canvas(s, width = 800, height = 100)
    canvas.pack()
    b1=ttk.Button(s,text='Click to Start', command = questions)
    b1.pack()
    photo = PhotoImage(file = 'small.png')
    b1.config(image=photo,compound=RIGHT)
    s.mainloop()

def stripes():
    stripes = Tk()
    stripes.title('Black Shirt with Stripes')
    canvas = Canvas(stripes, width = 800, height = 100)
    canvas.pack()
    b2=ttk.Button(stripes,text='Click to See Final Price', command = final)
    b2.pack()
    photo = PhotoImage(file = 'stripes.png')
    b2.config(image=photo,compound=RIGHT)
    stripes.mainloop()

这是完整的追溯:

Exception in Tkinter callback
Traceback (most recent call last):
File              "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter        /__init__.py", line 1705, in __call__
return self.func(*args)
File "/Users/Business/Documents/Python/small.py", line 159, in  stripes
b2.config(image=photo,compound=RIGHT)
File  "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter.   /__init__.py", line 1485, in configure
return self._configure('configure', cnf, kw)
File   "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter.   /__init__.py", line 1476, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: image "pyimage2" doesn't exist

1 个答案:

答案 0 :(得分:0)

当您收到错误消息“ _tkinter.TclError: image "pyimage2" doesn't exist”之类的消息时,则意味着tkinter无法确定它是哪个窗口的照片。这是由于有多个Tk()窗口。当您使用多个Tk时,几乎没有其他事情会产生问题,这就是Tkinter具有另一种类型的窗口Toplevel的原因,它把主窗口称为子窗口。

让我们进入您的代码。

除了这个错误,我在这里看不到其他问题。

  1. 就像我说的,Tk()窗口不超过一个。我相信您可能有两个以上。

  2. 如果您有一个主窗口并决定使用Toplevel打开更多窗口,请不要使用另一个mainloop()足以打开许多Toplevel窗口,但请记住至少使用一个{{ 1}}。

  3. 有时,当您在将图像存储在局部变量中的函数中定义mainloop()时,即使图像被Photoimage或{{1}显示,该图像也会被python清除。 }。因此,在这种情况下,请始终创建引用。

由于您的代码不可运行,因此我添加了一些必要的内容来运行和测试它。

Label