Форум сайта python.su
> Я не хочу в таблицу сохранять картинки, я хочу чтобы сохраненный файл использовался для хранения данных. Вот в таблице например должно вставляться вот это sym1.png, потом это загружается обратно в таблицу и там появляется иконка(чего не происходит).
Если нужно сохранять картинки, то:
1) Формат лучше заменить на Xml/Yaml
2) Перед сохранением картинку нужно сначала сериализовать в текст через модуль base64
Офлайн
Не взирая на боль…начал разбираться
Написал функцию сохранения в xlsx который картинки вставляет в таблицу.
def save_file(self): workbook = xlsxwriter.Workbook('Myfile.xlsx') worksheet = workbook.add_worksheet() for x in range(self.table.rowCount()): data = [] for y in range(self.table.columnCount()): item_data = self.table.item(x, y) if item_data is not None: data.append(item_data) worksheet.insert_image('A1', data[0])
def test(self): item = self.table.item(0, 0) print(item)
Отредактировано ROBOT-3000 (Дек. 18, 2016 15:51:48)
Офлайн
RodegastПотестил вот так
>Если нужно сохранять картинки, то:1) Формат лучше заменить на Xml/Yaml2) Перед сохранением картинку нужно сначала сериализовать в текст через модуль base64
def test(self): item = self.table.item(0, 0) pickle.dumps(item) print(item)
Отредактировано ROBOT-3000 (Дек. 18, 2016 18:41:08)
Офлайн
>> Потестил вот так
> Перед сохранением картинку нужно сначала сериализовать в текст через модуль base64
Разве я про pickle писал?
Не надо пытаться сериализовать item в место текста/картинки:
# Получили текст: txt = item.data(QtCore.Qt.DisplayRole) # Получили и сериализовали картинку: byteArray = QtCore.QByteArray() pixmap = item.data(QtCore.Qt.DecorationRole) pixmap.save(QtCore.QBuffer(byteArray), "PNG") kartunka = byteArray.toBase64()
Офлайн
Мне код не понятен
item читает значение ячейки с индексом 0, 0
Но ячейка якобы пустая, даже когда я туда помещаю иконку! Вот в чем проблема.
Я бы попытался сериализовать, но нечего.
А разве сейчас обязательно сериализовать если я использую xlsxwriter?
Тоесть если просто сканирую пустую ячейку print пишет None и если вставляю иконку пишет None .
Отредактировано ROBOT-3000 (Дек. 18, 2016 20:23:13)
Офлайн
> item читает значение ячейки с индексом 0, 0
item ничего не читает. Это объект ячейки, который содержит данные.
http://www.doc.crossplatform.ru/qt/4.6.x/qt.html
Каждый элемент в модели имеет набор данных, связанных с ним, каждый из которых имеет свою собственную роль. Роли используются представлением для указания модели, какой тип данных им необходим. Пользовательские модели будут возвращать данные этих типов.
pixmap = item.data(QtCore.Qt.DecorationRole)
Отредактировано Rodegast (Дек. 19, 2016 10:13:45)
Офлайн
Я использую QTableWidget а не модель c QTableView наверно поэтому мне не разобраться с этим.
Офлайн
> Я использую QTableWidget а не модель c QTableView
Без разницы. QTableWidget это своеобразная надстройка над модель-представлением.
Офлайн
Вот до чего додумал теперь добавляю в ячейку иконку вот так и сохраняю и все работает.
def on_clicked_btn(self, img): _item = QTableWidgetItem(QIcon(img), "") _item.setData(Qt.DecorationRole, QIcon(img)) self.table.setItem(self.table.currentRow(), self.table.currentColumn(), _item)
Отредактировано ROBOT-3000 (Янв. 16, 2017 18:16:13)
Офлайн