Найти - Пользователи
Полная версия: сохранить в csv
Начало » GUI » сохранить в csv
1 2
Rodegast
> Я не хочу в таблицу сохранять картинки, я хочу чтобы сохраненный файл использовался для хранения данных. Вот в таблице например должно вставляться вот это sym1.png, потом это загружается обратно в таблицу и там появляется иконка(чего не происходит).

Если нужно сохранять картинки, то:
1) Формат лучше заменить на Xml/Yaml
2) Перед сохранением картинку нужно сначала сериализовать в текст через модуль base64
ROBOT-3000
Не взирая на боль…начал разбираться
Написал функцию сохранения в 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)
Вывод если вставляю в ячейку букву,и оборачиваю как строку то печатает ее.
А если вставляю туда свою иконку то он печатает None.
Вывод из всего этого, не понятно куда тогда вставляются иконки ? где они хранятся ? Помогите ребята)
Как считать иконки которые вставил в таблицу?
Получается что иконки просто нет там куда я ее вставляю.

ROBOT-3000
Rodegast
>Если нужно сохранять картинки, то:1) Формат лучше заменить на Xml/Yaml2) Перед сохранением картинку нужно сначала сериализовать в текст через модуль base64
Потестил вот так
     def test(self):
        item = self.table.item(0, 0)
        pickle.dumps(item)
        print(item)
С буквами работает а на иконки пишет None.
Rodegast
>> Потестил вот так
> Перед сохранением картинку нужно сначала сериализовать в текст через модуль 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()
ROBOT-3000
Мне код не понятен
item читает значение ячейки с индексом 0, 0
Но ячейка якобы пустая, даже когда я туда помещаю иконку! Вот в чем проблема.
Я бы попытался сериализовать, но нечего.
А разве сейчас обязательно сериализовать если я использую xlsxwriter?
Тоесть если просто сканирую пустую ячейку print пишет None и если вставляю иконку пишет None .
Rodegast
> item читает значение ячейки с индексом 0, 0

item ничего не читает. Это объект ячейки, который содержит данные.
http://www.doc.crossplatform.ru/qt/4.6.x/qt.html
Каждый элемент в модели имеет набор данных, связанных с ним, каждый из которых имеет свою собственную роль. Роли используются представлением для указания модели, какой тип данных им необходим. Пользовательские модели будут возвращать данные этих типов.

> Но ячейка якобы пустая, даже когда я туда помещаю иконку! Вот в чем проблема.
Что-бы получить картинку надо запросить данные для роли DecorationRole
 pixmap = item.data(QtCore.Qt.DecorationRole)
Тебе вернут не саму картинку, а объект QPixmap или QIcon. Получить её в формате PNG или JPG можно через метод save.

> А разве сейчас обязательно сериализовать если я использую xlsxwriter?

Нет для xlsxwriter ничего сериализовать не надо.
ROBOT-3000
Я использую QTableWidget а не модель c QTableView наверно поэтому мне не разобраться с этим.
Rodegast
> Я использую QTableWidget а не модель c QTableView

Без разницы. QTableWidget это своеобразная надстройка над модель-представлением.
ROBOT-3000
Вот до чего додумал теперь добавляю в ячейку иконку вот так и сохраняю и все работает.

     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)

Если бы не одно но ! теперь это выглядит так


а раньше было красивее вот так


Как быть?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB