尝试创建位图时:_tkinter.TclError:未定义位图“ pyimage2”

时间:2018-10-29 17:46:27

标签: python python-3.x tkinter python-imaging-library

有一幅我想用不同颜色绘制的图像,因此我将其转换为位图,但是当尝试在画布上创建它时出现错误。

这是代码:

import PIL.Image
from PIL import ImageTk
from tkinter import *


im = PIL.Image.open("lightbulb.gif")
small_im = im.resize((20,20), resample=PIL.Image.NEAREST).convert('1');

root = Tk()
canvas = Canvas(root,width=100,height=100,bg='black')
canvas.pack()
bitmap = ImageTk.BitmapImage(small_im)
bitmap_id = canvas.create_bitmap(3,3,background='', foreground='gray', bitmap=bitmap,
                                 anchor=NW)
root.mainloop()

我收到以下错误:

Traceback (most recent call last):
  File "/Users/ronen/Dropbox/trycanvas/bitmaps.py", line 13, in <module>
    bitmap_id = canvas.create_bitmap(3,3,background="", foreground="gray", bitmap=bitmap, anchor=NW)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 2486, in create_bitmap
    return self._create('bitmap', args, kw)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 2480, in _create
    *(args + self._options(cnf, kw))))
_tkinter.TclError: bitmap "pyimage2" not defined

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

tkinter canvas.create_bitmap()方法期望其bitmap=选项是一个 string ,其中包含标准位图之一的 name (即'error''gray75''gray50''gray25''gray12''hourglass''info''questhead',{{ 1}}和'question'),如下所示:

image showing the standard bitmaps graphically

Or 文件中带有您自己的文件的路径名,该文件的路径名以'warning'字符开头的.xbm文件格式。

下面是如何修改代码,以便将要显示的图像保存在临时@格式文件中,然后告诉tkinter使用该图像:

.xbm

答案 1 :(得分:0)

好的,我现在知道发生了什么。 ImageTk.BitmapImage实际上返回图像,而不是位图,但是可以用来更改颜色。很有趣:

bitmap = ImageTk.BitmapImage(small_im)
bitmap_id = canvas.create_bitmap(3,3,background='', foreground='gray', bitmap=bitmap,
                                 anchor=NW)

我应该已经编码:

from_bitmap = ImageTk.BitmapImage(small_im, background='', foreground='gray')
bitmap_id = canvas.create_image(3,3, image=from_bitmap, anchor=NW)