为什么世界上Tkinter使用canvas.create_image打破?

问题描述 投票:1回答:3

我在工作中有一个python GUI应用程序,我打算在Windows和Mac上使用它。关于Tkinter的文档并不是最好的,google-fu让我失望了。

简而言之,我正在做:

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))))

任何能够摆脱任何光明的人?

python python-imaging-library tkinter tk
3个回答
4
投票

Tk有两种类型的图形,位图和图像。图像有两种形式,位图和照片。位图和位图类型的图像不是一回事,这会导致文档混淆。 PhotoImage创建一个类型为photo的图像,并且需要画布中的图像对象,因此,正如您已经总结的那样,解决方案是使用create_image。


2
投票

简答:当你的意思是使用create_image时,不要使用create_bitmap。


0
投票

create_bitmap()方法没有image论证;它有一个bitmap参数。

你得到的错误来自于这样一个事实:在Tkinter中,一个Tcl解释器在Python进程中嵌入了运行,所有GUI交互在Python和Tcl之间来回传递;所以,你得到的错误来自于Tcl回复“我在.create_bitmap调用中不知道任何-image选项”的事实。

无论如何,像杰夫所说,你可能想要create_image方法。

© www.soinside.com 2019 - 2024. All rights reserved.