从mysql数据库到tkinter窗口显示图像(BLOB)

时间:2015-04-02 07:36:00

标签: mysql python-2.7 raspberry-pi

我的数据库包含一个名为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) 

3 个答案:

答案 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