Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 23.05.2018
Сообщений: 18
1
PyQt5

Сериализация таблицы QTableWidget

13.03.2019, 09:35. Показов 4020. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Как лучше всего сохранить таблицу QTableWidget с помощью pickle? Использую PyQt5 v.5.12.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2019, 09:35
Ответы с готовыми решениями:

Редактирование по выбору строки таблицы QTableWidget()
Необходимо отредактировать строку таблицы базы данных выбранную по клику (не заполняя id строки)....

QTableWidget (1) >>> QTableWidget (2) исключить повторяющиеся строки
Добрый день. Подскажите как лучше реализовать... Хочу реализовать исключение повторяющихся...

QTableWidget. Удаление таблицы
Здравствуйте. Пробую удалить строки таблицы, с помощью ui->tableWidget->setRowCount( 0); но не...

Вывод таблицы на QTableWidget
Добрый день, подскажите пожалуйста, как можно реализовать вывод таблицы из уже существующей БД на...

4
Эксперт Python
4640 / 2056 / 363
Регистрация: 17.03.2012
Сообщений: 10,139
Записей в блоге: 6
13.03.2019, 14:01 2
Лучший ответ Сообщение было отмечено amat как решение

Решение

Сдаётся мне, вы чего-то не понимаете.
QTableWidget - это всего лишь виджет, объект в памяти, его нет никакого смысла сохранять. Сохранять имеет смысл то, что должно жить в перерывах между запусками программы.
0
1 / 1 / 0
Регистрация: 23.05.2018
Сообщений: 18
13.03.2019, 20:45  [ТС] 3
dondublon
На самом деле я очень и очень многого не понимаю, отсюда и такие глупые вопросы Я имел ввиду не сам виджет, а данные таблицы конечно. С того момента, как кто-то что-то ввел в этот виджет он поимел определенные данные и мне нужно их сохранить с помощью pickle в файл, а потом инициализировать таблицу ими при следущей инициализации. Я сначала грешным делом подумал, что модель можно сериализировать с помощью pickle, но у меня не получилось и поэтому я решил, что это мой косяк, отсюда и вопрос. Кроме того может есть какой велосипед или хак для того, что бы просто сохранить с помощью pickle модель, а не лепить какую-то прослойку с данными.
0
Эксперт Python
4640 / 2056 / 363
Регистрация: 17.03.2012
Сообщений: 10,139
Записей в блоге: 6
14.03.2019, 10:54 4
Для новичков в подобных вопросах всегда советую эту статью https://habr.com/ru/post/171443/ .
Вам надо срочно начать рассматривать ситуацию с другого конца. Ваши данные - первичны. Модели Qt - вторичны, они обращаются к данным. Ну а уж виджеты - это вообще третья очередь.
Данные не являются производной от виджетов (а ваш первоначальный вопрос подразумевает именно это).
В практическом плане это означает переделку вашей архитектуры, отказ от QTableWidget и, дайте угадаю - QStandardItem.
0
942 / 700 / 273
Регистрация: 10.12.2016
Сообщений: 1,733
15.03.2019, 10:52 5
Цитата Сообщение от amat Посмотреть сообщение
мне нужно их сохранить с помощью pickle в файл
pickle - для сохранения объектов питона
для сохранения текста - csv/sqlite
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from PyQt5.QtWidgets import (QApplication, QGridLayout, 
QWidget, QTableWidget, QTableWidgetItem, QFileDialog,QPushButton)
 
 
class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.fname = ''
        self.table = QTableWidget(3,4)
        self.btnLoad = QPushButton("load")
        self.btnSave = QPushButton("Save")
        grid = QGridLayout(self)
        grid.setContentsMargins(1,1,1,1)
        grid.addWidget(self.table,0,0,4,4)
        grid.addWidget(self.btnLoad, 4, 0)
        grid.addWidget(self.btnSave, 4, 1)
        self.btnLoad.clicked.connect(self.on_load)
        self.btnSave.clicked.connect(self.on_save)
        
    def on_load(self):
        fname,_ = QFileDialog.getOpenFileName(self,'Load',self.fname,"*.csv")
        if not fname: return
        self.fname = fname
        with open(fname) as f:
            s = f.read()
        data = [i.split(';') for i in s.strip().split('\n')]
        rows = len(data)
        cols = len(data[0])
        self.table.clear()
        self.table.setRowCount(rows)
        self.table.setColumnCount(cols)
        for row in range(rows):
            for col in range(cols):
                self.table.setItem(row,col,QTableWidgetItem(data[row][col]))
        
 
    def on_save(self):
        fname,_ = QFileDialog.getSaveFileName(self,'Save',self.fname,"*.csv")
        if not fname: return
        self.fname = fname
        f = open(fname,'w')
        for row in range(self.table.rowCount()):
            tmp = []
            for col in range(self.table.columnCount()):
                try: tmp.append(self.table.item(row,col).text())
                except: tmp.append('')
            f.write(';'.join(tmp) + '\n')
        f.close()
        
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec())
0
15.03.2019, 10:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2019, 10:52
Помогаю со студенческими работами здесь

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

QTableWidget, прокрутка таблицы
Здравствуйте, такая проблема, создается таблица из, допустим, 100 элементов(просто 1 столбец),...

QTableWidget сохранение таблицы
вобщем, помогите, кто знает) у меня есть таблицы с данными, которые я ввожу в окне. мне надо эти...

Сохранение таблицы из QtableWidget в файл
Сейчас, при сохранении данных файл, если я не вывел таблицу, программа ломается. Можно ли как то...

Получение значения CheckBox из таблицы в QTableWidget
Добрый день. Помоги пожалуйста . Как вытащить из таблицы занчение Checkbox. true или false....

QTableWidgetItem не добавляется в целевую ячейку таблицы QTableWidget
Дело тут в чем, необходимо что бы строки добавлялись сами и заполнялись числами, по увеличению...

Как достать и использовать значения из таблицы в qtablewidget
В программе для построения диаграмм значения введенные в таблицу нужно потом использовать для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru