#python #sqlite #wxpython
#python #sqlite #wxpython
Вопрос:
Мой класс
class Mydb():
def __init__ (self):
self.conn = sqlite3.connect('C:\lab\pictures.db')
def queryf(self,q):
c = self.conn.cursor()
c.execute(q)
data = c.fetchone()
return data[0]
Использование класса Mydb
....
q = "SELECT file FROM t_pictures WHERE id = 1;"
db = Mydb()
_data = db.queryf(q)
start_image = wx.Image(_data)
start_image.Rescale(150, 100)
image = wx.BitmapFromImage(start_image)
self.bitmap_button_1 = wx.BitmapButton(self, wx.ID_ANY,image)
Ошибка
TypeError: String or Unicode type required
Комментарии:
1. с помощью open(«c:\lab\ai.jpg «, «wb») в качестве выходного файла: q = «ВЫБЕРИТЕ файл ИЗ t_pictures, ГДЕ id = 1;» db = Mydb() _data = db.queryf(q) output_file. запись (_data)
Ответ №1:
def Onbutton_1(self,event):
q = "SELECT file FROM t_pictures WHERE id = 1;"
db = Mydb()
_buffer = db.queryf(q)
stream = cStringIO.StringIO(_buffer)
image = wx.ImageFromStream(stream)
_pic = wx.BitmapFromImage(image.Rescale(150, 100))
self.bitmap_button_1 = wx.BitmapButton(self, wx.BITMAP_TYPE_ANY,_pic)
Ответ №2:
База данных не возвращает строку из этого запроса. Вам нужно выяснить, какой тип объекта он возвращает. Я предполагаю, что вы получаете кортеж. В этом случае извлеките строку из кортежа и попробуйте поместить ее в свой виджет изображения. Также убедитесь, что вы передаете wx.BITMAP_TYPE_ANY в качестве второго параметра в wx.Image, чтобы сделать виджет более гибким. См. http://www.wxpython.org/docs/api/wx.Image-class.html для получения более подробной информации.
Комментарии:
1. Когда я использую тот же запрос def для загрузки изображения, он работает пример: с open(«c:\lab\ai.jpg «, «wb») в качестве выходного файла: q = «ВЫБЕРИТЕ файл ИЗ t_pictures, ГДЕ id = 1;» db = Mydb() _data = db.queryf(q) output_file. запись (_data) Я попытался изменить 2-й параметр на wx.BITMAP_TYPE_ANY.
2. Введите тип печати (_data) и посмотрите, что вы получите.
3. Результат <тип ‘buffer’>
4. Это ваша проблема. Запрос возвращает объект буфера, а не строку.
5. Вот почему я присоединяюсь к Stack overflow, потому что у меня проблема, которая требует решения. Для меня более полезно дать мне правильный и рабочий код.