我的数据库包含一个名为LOGO的图像(BLOB)。我想在python TkInter窗口中显示图像
import Tkinter
window= Tk()
db= MySQLdb.connect("localhost","root","anup","NursecallDB")
cursor=db.cursor()
sql= "SELECT LOGO FROM SYSTEMDETAILS"
cursor.execute(sql)
logo=cursor.fetchone()
img =PhotoImage(logo)
panel = Tkinter.Label(window, image = img)
panel.grid(row=0,rowspan=5,columnspan=2)
window.mainloop()
当我运行此程序时,它会在
处显示错误panel = Tkinter.Label(window, image = img)
TypeError:_str_returned non-string(type tuple)
答案 0 :(得分:1)
将图像上传到文件夹并将路径插入数据库。如果徽标是图像的路径。程序将有效。
答案 1 :(得分:0)
PhotoImage将一个字符串变为参数,该参数是您要加载的图像的文件名或者是Python图像对象。它不能将blob作为参数。你需要的是从缓冲区加载图像(请参阅此处的方法http://effbot.org/imagingbook/image.htm),然后将图像传递给PhotoImage构造函数
答案 2 :(得分:0)
如果您像我一样,不想通过磁盘传递图像,这就是python3的代码(遵循DARK_DUCK建议):
from io import BytesIO
from PIL import Image, ImageTk
...
logo=cursor.fetchone()
img = Image.open(BytesIO(logo))
phimg = ImageTk.PhotoImage(img)
panel = Tkinter.Label(window, image = phimg)
panel.grid(row=0,rowspan=5,columnspan=2)
我认为对于python 2.7,您将不得不使用StringIO而不是BytesIO。看到: Python PIL reading PNG from STDIN