为什么Tkinter使用canvas.create_image会崩溃?
我正在开发一个Python的图形界面应用,打算在Windows和Mac上都能用。关于Tkinter的文档不是很好,而且我在网上搜索也没有找到有用的信息。
简单来说,我在做的是:
c = Canvas(
master=frame,
width=settings.WINDOW_SIZE[0],
height=settings.WINDOW_SIZE[1],
background=settings.CANVAS_COLOUR
)
file = PhotoImage(file=os.path.join('path', 'to', 'gif'))
c.create_bitmap(position, image=file)
c.pack()
root.mainloop()
如果我把create_bitmap这一行注释掉,应用就能正常绘制。如果我把它重新加上,就会出现以下错误:
_tkinter.TclError: unknown option "-image"
这就很奇怪了。根据Python的测试(也就是导入_tkinter、Tkinter,然后调用Tk()
),Tkinter是没问题的。我还在我的Windows系统(XP SP3,Python 2.6)上安装了PIL,以为它能在底层帮忙处理一些事情。但看起来并没有;我还是遇到了之前提到的错误。
完整的错误追踪信息,除了我已经贴出的代码,是:
File "C:\Python26\lib\lib-tk\Tkinter.py", line 2153, in create_bitmap
return self._create('bitmap', args, kw)
File "C:\Python26\lib\lib-tk\Tkinter.py", line 2147, in _create
*(args + self._options(cnf, kw))))
有没有人能帮我解答一下这个问题?
3 个回答
这个 create_bitmap()
方法并没有一个叫 image
的参数;它实际上有一个叫 bitmap
的参数。
你遇到的错误是因为在 Tkinter 中,有一个 Tcl 解释器嵌入在 Python 进程里,所有的图形界面互动都是在 Python 和 Tcl 之间来回进行的。所以,你看到的错误是因为 Tcl 回应说:“我不知道 .create_bitmap 调用中有什么 -image 选项”。
总之,就像 Jeff 说的,你可能想用 create_image
方法。
简单来说:当你想用 create_image 的时候,不要用 create_bitmap。
Tk有两种图形类型,分别是位图和图像。图像又分为两种,位图和照片。位图和类型为位图的图像并不是一回事,这常常让人感到困惑。
PhotoImage是用来创建照片类型的图像,它需要在画布上有一个图像对象。所以,解决方法就是你已经想到的,使用create_image。