saving tableWidget

Nik_812

Новичок
Пользователь
Июл 4, 2022
10
0
1
0
у меня есть таблица и 2 QLineEdit, которые я пытаюсь сохранить, если QLineEdit сохраняются без проблем, подскажите пожалуйста как можно сохранить QTableWidget с его значениями


Код:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QSize, QCoreApplication, QSettings
CONFIG_FILE_NAME = 'config.ini'


class Ui_MainWindow(QtWidgets.QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1920, 1000)
        self.settings = QSettings("Nik", "Farmer.io", self)
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(200, 0, 1720, 1000))
        Row = 1000
        self.row = Row
        Col = 7
        self.tableWidget.setRowCount(Row)
        self.tableWidget.setColumnCount(Col)
    def save_settings(self):
        settings = QSettings(CONFIG_FILE_NAME, QSettings.IniFormat)

        settings.setValue('Geometry', self.saveGeometry())
        settings.setValue('WindowState', self.saveState())

        settings.setValue('StrValue', self.lineEdit.text())
        settings.setValue('StrValue1', self.lineEdit_2.text())
        #settings.setValue('Tab', self.tableWidget())

    def load_settings(self):
        settings = QSettings(CONFIG_FILE_NAME, QSettings.IniFormat)

        geometry = settings.value('Geometry')
        if geometry:
            self.restoreGeometry(geometry)

        state = settings.value('WindowState')
        if state:
            self.restoreState(state)

        self.lineEdit.setText(settings.value('StrValue', ""))
        self.lineEdit_2.setText(settings.value('StrValue1', ""))
        #self.tableWidget(settings.value('Tab', ""))


    def closeEvent(self, e):
        self.save_settings()
        super().closeEvent(e)   



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
а на каком этапе сохранение должно произойти?
у вас чет каша какая то в коде...

вот пример
Python:
from PyQt5 import QtCore
import PyQt5.QtWidgets


class Window(PyQt5.QtWidgets.QWidget):
    def __init__(self, rows, columns):
        PyQt5.QtWidgets.QWidget.__init__(self)
        self.table = PyQt5.QtWidgets.QTableWidget(self)
        self.table.setRowCount(rows)
        self.table.setColumnCount(columns)
        for column in range(columns):
            for row in range(rows):
                item = PyQt5.QtWidgets.QTableWidgetItem(f"Text{row}")
                self.table.setItem(row, column, item)
        self.edit = PyQt5.QtWidgets.QLineEdit(self)
        self.button_save = PyQt5.QtWidgets.QPushButton("Сохранить в конфиг", self)
        self.button_save.clicked.connect(self.slotButton_save)
        layout = PyQt5.QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.table)
        layout.addWidget(self.edit)
        layout.addWidget(self.button_save)

    def slotButton_save(self):
        setting = QtCore.QSettings("config.ini", QtCore.QSettings.IniFormat)

        setting.setValue("edit/edit", self.edit.text())  # записываем из lineedit, категории и подкатегории деляться слешем
        #  например сделаем так,
        #  каждая категория конфига это столбец, имя категории - номер столбца
        countColumn = 0  # счетчик для столбцов
        while countColumn < self.table.columnCount():  # пока счетчик меньше, чем кол во столбцов
            for i in range(self.table.rowCount()):  # пробегаем все строчки в столбце
                #  и записываем в конфиг f"Column{countColumn}/{i}, категории и подкатегории деляться слешем
                #  Column{countColumn} - имя категории, номер столбца
                #  {i} - имя подкатегории, строки
                setting.setValue(f"Column{countColumn}/{i}", self.table.item(i, countColumn).text())
            countColumn += 1


if __name__ == '__main__':
    import sys
    app = PyQt5.QtWidgets.QApplication(sys.argv)
    window = Window(6, 3)
    window.resize(350, 300)
    window.show()
    sys.exit(app.exec_())
 

Nik_812

Новичок
Пользователь
Июл 4, 2022
10
0
1
а на каком этапе сохранение должно произойти?
у вас чет каша какая то в коде...

вот пример
Python:
from PyQt5 import QtCore
import PyQt5.QtWidgets


class Window(PyQt5.QtWidgets.QWidget):
    def __init__(self, rows, columns):
        PyQt5.QtWidgets.QWidget.__init__(self)
        self.table = PyQt5.QtWidgets.QTableWidget(self)
        self.table.setRowCount(rows)
        self.table.setColumnCount(columns)
        for column in range(columns):
            for row in range(rows):
                item = PyQt5.QtWidgets.QTableWidgetItem(f"Text{row}")
                self.table.setItem(row, column, item)
        self.edit = PyQt5.QtWidgets.QLineEdit(self)
        self.button_save = PyQt5.QtWidgets.QPushButton("Сохранить в конфиг", self)
        self.button_save.clicked.connect(self.slotButton_save)
        layout = PyQt5.QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.table)
        layout.addWidget(self.edit)
        layout.addWidget(self.button_save)

    def slotButton_save(self):
        setting = QtCore.QSettings("config.ini", QtCore.QSettings.IniFormat)

        setting.setValue("edit/edit", self.edit.text())  # записываем из lineedit, категории и подкатегории деляться слешем
        #  например сделаем так,
        #  каждая категория конфига это столбец, имя категории - номер столбца
        countColumn = 0  # счетчик для столбцов
        while countColumn < self.table.columnCount():  # пока счетчик меньше, чем кол во столбцов
            for i in range(self.table.rowCount()):  # пробегаем все строчки в столбце
                #  и записываем в конфиг f"Column{countColumn}/{i}, категории и подкатегории деляться слешем
                #  Column{countColumn} - имя категории, номер столбца
                #  {i} - имя подкатегории, строки
                setting.setValue(f"Column{countColumn}/{i}", self.table.item(i, countColumn).text())
            countColumn += 1


if __name__ == '__main__':
    import sys
    app = PyQt5.QtWidgets.QApplication(sys.argv)
    window = Window(6, 3)
    window.resize(350, 300)
    window.show()
    sys.exit(app.exec_())[/CODE
[/QUOTE]

а на каком этапе сохранение должно произойти?
у вас чет каша какая то в коде...

вот пример
Python:
from PyQt5 import QtCore
import PyQt5.QtWidgets


class Window(PyQt5.QtWidgets.QWidget):
    def __init__(self, rows, columns):
        PyQt5.QtWidgets.QWidget.__init__(self)
        self.table = PyQt5.QtWidgets.QTableWidget(self)
        self.table.setRowCount(rows)
        self.table.setColumnCount(columns)
        for column in range(columns):
            for row in range(rows):
                item = PyQt5.QtWidgets.QTableWidgetItem(f"Text{row}")
                self.table.setItem(row, column, item)
        self.edit = PyQt5.QtWidgets.QLineEdit(self)
        self.button_save = PyQt5.QtWidgets.QPushButton("Сохранить в конфиг", self)
        self.button_save.clicked.connect(self.slotButton_save)
        layout = PyQt5.QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.table)
        layout.addWidget(self.edit)
        layout.addWidget(self.button_save)

    def slotButton_save(self):
        setting = QtCore.QSettings("config.ini", QtCore.QSettings.IniFormat)

        setting.setValue("edit/edit", self.edit.text())  # записываем из lineedit, категории и подкатегории деляться слешем
        #  например сделаем так,
        #  каждая категория конфига это столбец, имя категории - номер столбца
        countColumn = 0  # счетчик для столбцов
        while countColumn < self.table.columnCount():  # пока счетчик меньше, чем кол во столбцов
            for i in range(self.table.rowCount()):  # пробегаем все строчки в столбце
                #  и записываем в конфиг f"Column{countColumn}/{i}, категории и подкатегории деляться слешем
                #  Column{countColumn} - имя категории, номер столбца
                #  {i} - имя подкатегории, строки
                setting.setValue(f"Column{countColumn}/{i}", self.table.item(i, countColumn).text())
            countColumn += 1


if __name__ == '__main__':
    import sys
    app = PyQt5.QtWidgets.QApplication(sys.argv)
    window = Window(6, 3)
    window.resize(350, 300)
    window.show()
    sys.exit(app.exec_())
прости, что запариваю, как можно адаптировать под этот код?
сохранение должно происходить или при нажатии на кнопку или при выходе
Python:
from PyQt5 import QtCore, QtGui, QtWidgets



class Ui_MainWindow(QtWidgets.QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1920, 1000)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(10, 40, 131, 20))
        self.lineEdit.setInputMask("")
        self.lineEdit.setText("")
        self.lineEdit.setPlaceholderText("поиск...")
        self.lineEdit.textChanged.connect(self.search)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 100, 131, 20))
        self.lineEdit_2.setInputMask("")
        self.lineEdit_2.setText("")
        self.lineEdit_2.setPlaceholderText("поиск...")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(10, 310, 84, 23))
        self.pushButton.setObjectName("pushButton")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(200, 0, 1720, 1000))
        Row = 10000
        Col = 7
        self.tableWidget.setRowCount(Row)
        self.tableWidget.setColumnCount(Col)
        self.tableWidget.setObjectName("tableWidget")
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(6, item)
        self.tableWidget.horizontalHeader().setDefaultSectionSize(237)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1920, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)



     

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Старт"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "Регион"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "Адрес"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "Предприятие"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "Ассортимент"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("MainWindow", "Количество"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("MainWindow", "Результат"))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("MainWindow", "Примечание"))


           


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
можно так, добавленный код выделил решетками

Python:
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(QtWidgets.QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1920, 1000)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(10, 40, 131, 20))
        self.lineEdit.setInputMask("")
        self.lineEdit.setText("")
        self.lineEdit.setPlaceholderText("поиск...")
        # self.lineEdit.textChanged.connect(self.search)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 100, 131, 20))
        self.lineEdit_2.setInputMask("")
        self.lineEdit_2.setText("")
        self.lineEdit_2.setPlaceholderText("поиск...")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(10, 310, 84, 23))
        self.pushButton.setObjectName("pushButton")

        ####################################################################
        self.pushButton_save = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_save.setGeometry(QtCore.QRect(10, 350, 84, 23))
        self.pushButton_save.setObjectName("pushButton_save")
        self.pushButton_save.clicked.connect(self.slotButton_save)
        ####################################################################

        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(200, 0, 1720, 1000))
        Row = 10000
        Col = 7
        self.tableWidget.setRowCount(Row)
        self.tableWidget.setColumnCount(Col)
        self.tableWidget.setObjectName("tableWidget")
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(6, item)
        self.tableWidget.horizontalHeader().setDefaultSectionSize(237)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1920, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    ####################################################################
    def slotButton_save(self):
        setting = QtCore.QSettings("config.ini", QtCore.QSettings.IniFormat)

        setting.setValue("edit/edit",
                         self.lineEdit.text())  # записываем из lineedit, категории и подкатегории деляться слешем
        #  например сделаем так,
        #  каждая категория конфига это столбец, имя категории - номер столбца
        countColumn = 0  # счетчик для столбцов
        while countColumn < self.tableWidget.columnCount():  # пока счетчик меньше, чем кол во столбцов
            for i in range(self.tableWidget.rowCount()):  # пробегаем все строчки в столбце
                #  и записываем в конфиг f"Column{countColumn}/{i}, категории и подкатегории деляться слешем
                #  Column{countColumn} - имя категории, номер столбца
                #  {i} - имя подкатегории, строки
                try:
                    setting.setValue(f"Column{countColumn}/{i}", self.tableWidget.item(i, countColumn).text())
                except AttributeError:
                    setting.setValue(f"Column{countColumn}/{i}", "empty")
            countColumn += 1
    ####################################################################

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Старт"))

        ####################################################################
        self.pushButton_save.setText(_translate("MainWindow", "Сохранить"))
        ####################################################################

        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "Регион"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "Адрес"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "Предприятие"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "Ассортимент"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("MainWindow", "Количество"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("MainWindow", "Результат"))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("MainWindow", "Примечание"))


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
вообще у вас наверное проблемы с пониманием qt,
посмотрите эту тему, я там постарался объяснить человеку, как это работает, и как строиться приложение в pyqt или pyside

и еще пораньше была тема тоже про qt можете поискать
 

Nik_812

Новичок
Пользователь
Июл 4, 2022
10
0
1
вообще у вас наверное проблемы с пониманием qt, посмотрите эту тему, я там постарался объяснить человеку, как это работает

и еще пораньше была тема тоже про qt можете поискать
Это да, только начал его изучать, поэтому столько вопросов, благодарю за помощь)
 

Форум IT Специалистов