Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2016 11:25:12

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

сохранить в csv

> Я не хочу в таблицу сохранять картинки, я хочу чтобы сохраненный файл использовался для хранения данных. Вот в таблице например должно вставляться вот это sym1.png, потом это загружается обратно в таблицу и там появляется иконка(чего не происходит).

Если нужно сохранять картинки, то:
1) Формат лучше заменить на Xml/Yaml
2) Перед сохранением картинку нужно сначала сериализовать в текст через модуль base64



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#2 Дек. 18, 2016 15:44:52

ROBOT-3000
Зарегистрирован: 2016-11-27
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранить в csv

Не взирая на боль…начал разбираться
Написал функцию сохранения в 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 (Дек. 18, 2016 15:51:48)

Офлайн

#3 Дек. 18, 2016 18:39:02

ROBOT-3000
Зарегистрирован: 2016-11-27
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранить в csv

Rodegast
>Если нужно сохранять картинки, то:1) Формат лучше заменить на Xml/Yaml2) Перед сохранением картинку нужно сначала сериализовать в текст через модуль base64
Потестил вот так
     def test(self):
        item = self.table.item(0, 0)
        pickle.dumps(item)
        print(item)
С буквами работает а на иконки пишет None.

Отредактировано ROBOT-3000 (Дек. 18, 2016 18:41:08)

Офлайн

#4 Дек. 18, 2016 19:49:15

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

сохранить в csv

>> Потестил вот так
> Перед сохранением картинку нужно сначала сериализовать в текст через модуль 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()



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Дек. 18, 2016 20:17:59

ROBOT-3000
Зарегистрирован: 2016-11-27
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранить в csv

Мне код не понятен
item читает значение ячейки с индексом 0, 0
Но ячейка якобы пустая, даже когда я туда помещаю иконку! Вот в чем проблема.
Я бы попытался сериализовать, но нечего.
А разве сейчас обязательно сериализовать если я использую xlsxwriter?
Тоесть если просто сканирую пустую ячейку print пишет None и если вставляю иконку пишет None .

Отредактировано ROBOT-3000 (Дек. 18, 2016 20:23:13)

Офлайн

#6 Дек. 19, 2016 10:13:31

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

сохранить в csv

> 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 ничего сериализовать не надо.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Дек. 19, 2016 10:13:45)

Офлайн

#7 Дек. 19, 2016 11:54:46

ROBOT-3000
Зарегистрирован: 2016-11-27
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранить в csv

Я использую QTableWidget а не модель c QTableView наверно поэтому мне не разобраться с этим.

Офлайн

#8 Дек. 19, 2016 13:41:07

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

сохранить в csv

> Я использую QTableWidget а не модель c QTableView

Без разницы. QTableWidget это своеобразная надстройка над модель-представлением.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Янв. 16, 2017 18:15:48

ROBOT-3000
Зарегистрирован: 2016-11-27
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранить в csv

Вот до чего додумал теперь добавляю в ячейку иконку вот так и сохраняю и все работает.

     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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version