Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将图像从BytesIO对象加载到Tk小部件_Python_Python 2.7_Tkinter_Bytesio_Photoimage - Fatal编程技术网

Python 将图像从BytesIO对象加载到Tk小部件

Python 将图像从BytesIO对象加载到Tk小部件,python,python-2.7,tkinter,bytesio,photoimage,Python,Python 2.7,Tkinter,Bytesio,Photoimage,我想将一幅图像从BytesIO对象渲染到画布,为此,我使用以下代码: from io import BytesIO from Tkinter import * from PIL import Image as ImageModule f = open("test.png","rb") bdata = BytesIO() bdata.write(f.read()) bdata.seek(0) pilImage = ImageModule.open(bdata) canvas_width = 79

我想将一幅图像从BytesIO对象渲染到画布,为此,我使用以下代码:

from io import BytesIO
from Tkinter import *
from PIL import Image as ImageModule
f = open("test.png","rb")
bdata = BytesIO()
bdata.write(f.read())
bdata.seek(0)

pilImage = ImageModule.open(bdata)
canvas_width = 794
canvas_height =559

master = Tk()
canvas = Canvas(master, 
           width=canvas_width, 
           height=canvas_height)
canvas.pack()
img = PhotoImage(pilImage)
i = canvas.create_image(0,0, anchor=NW, image=img)
mainloop()
我用画布和标签收到此错误消息:

File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2058, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
TypeError: __str__ returned non-string (type instance)

如果您知道如何修复此代码或以其他方式从BytesIO对象在画布上渲染图像,那将非常棒。谢谢

正如错误消息所说,pilImage是本例中ImageModule类的一个类实例,PhotoImage希望打开一个包含文件名的字符串

pilImage = ImageModule.open(bdata)  ## returns instance of class
您应该能够按原样使用“test.png”


谢谢,但这不是问题,问题是没有安装ImageTk模块
img=PhotoImage(file="/path/to/image/test.png")