所以,我正在尝试加载图像并将其绘制到画布上,如下所示:
self.field = tk.Canvas(height=310, width=450, bg="white", highlightthickness=0)
self.field.pack(side=tk.TOP)
photo = tk.PhotoImage(file=os.path.join(os.path.dirname(__file__), "Photos","Image.png"))
self.img = self.field.create_image(155, 225, image=photo)
print(self.img) # apparently prints "1".
self.img.image = sprite # blows up with AttributeError: 'int' object has no attribute 'image'
但是,如同最后一行一样,它成功绘制,但也会因为我在最后一行中提到的错误而爆炸。
为什么将画布绘图解释为int? (如打印行所示)
编辑:请不要担心格式错误,因为我的版本支持.png不需要PIL。
答案 0 :(得分:2)
了解您所呼叫的方法的重要性非常重要。在这种情况下,您将在tkinter Canvas对象(self.field)上调用create_image方法。根据文档(或至少我通过Google找到的一些文档 - 我对tkinter不太熟悉):
此构造函数返回该画布的图像对象的整数ID号。
(http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/create_image.html)
所以你要将self.img设置为Canvas对象中图像对象的ID号 - 而不是图像对象本身,它似乎是Canvas对象的内部对象。有关修改图像的方法,请检查其他Canvas方法。看起来有些函数使用生成的对象ID来修改项目,例如Canvas.itemconfig(...)或Canvas.coords(...)。