从sqlite3检索图像并在Kivy图像小部件中显示 - ValueError

3

需求

我想从数据库中检索一张图片,并将这张图片设置给kivy的Image小部件,但该操作会引发ValueError错误,我不确定原因。欢迎任何建议。

数据库:Sqlite3

表名:Users

列名:UserID、UserName和UserImage

   def populate_fields(self): # NEW
      # Code retrieves text data and display in textinput fields here.

      # STEP 1: RETRIEVE IMAGE
      connection = sqlite3.connect("demo.db")
      with connection:
          cursor = connection.cursor()
          cursor.execute("SELECT UserImage from Users where 
          UserID=?",self.data_items[columns[0]]['text'] )
          image = cursor.fetchone()
          data = io.BytesIO(image[0])

      #STEP 2: SET OUTPUT TO IMAGE WIDGET
          self.image.source = data # ---> triggers an Error

错误追踪:

self.image.source = data
   File "kivy\weakproxy.pyx", line 33, in kivy.weakproxy.WeakProxy.__setattr__ (kivy\weakproxy.c:1471)
   File "kivy\properties.pyx", line 478, in kivy.properties.Property.__set__ (kivy\properties.c:5572)
   File "kivy\properties.pyx", line 513, in kivy.properties.Property.set (kivy\properties.c:6352)
   File "kivy\properties.pyx", line 504, in kivy.properties.Property.set (kivy\properties.c:6173)
   File "kivy\properties.pyx", line 676, in kivy.properties.StringProperty.check (kivy\properties.c:8613)
 ValueError: Image.source accept only str
2个回答

4
执行 io.BytesIO() 后,data 将转换为 Bytes 类型。使用 Kivy 的CoreImagetexturedata 进行转换。

替换为:

self.image.source = data

使用:

self.image.texture = CoreImage(data, ext="png").texture

图像源

source

Filename / source of your image.

source is a StringProperty and defaults to None

输出

Img01 Img02


(本段为HTML代码,无需翻译)

0

Ikolim的回答很好,但更具体地说, 如果您想直接在kivy中显示二进制图像,可以简单地使用io模块(import io)和kivy图像模块(kivy.uix.image)。

请检查此代码:

from kivy.uix.image import Image, CoreImage
import io


binary_data= #binary img extracted from sqlite

data = io.BytesIO(binary_data)
img=CoreImage(data, ext="png").texture

new_img= Image()
new_img.texture= img

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接