PyQt5 QSetting doesn't save information
Unsolved
General and Desktop
-
Created a programm with table and parametrs "Name" and "Points", but with QSettings, programm does not save information. Win 10, Py 3.8.2, PyQt5 5.14.2
Programm creates Settings.ini by itself, but doesn't do anything. Help please because have no other idea how to do it
import sys from random import randint from PyQt5 import QtWidgets, QtCore, QtGui class CustomTableView(QtWidgets.QTableView): def __init__(self, parent=None): super(CustomTableView, self).__init__(parent) self.setSortingEnabled(True) def KeyPressEvent(self, event: QtGui.QKeyEvent): if event.key() == QtCore.Qt.Key_Enter: print("Key_Enter ") elif event.key() == QtCore.Qt.Key_Return: print("Key_Return ") class NumberSortModel(QtCore.QSortFilterProxyModel): def lessThan(self, left_index: "QModelIndex", right_index: "QModelIndex") -> bool: left_var: str = left_index.data(QtCore.Qt.EditRole) right_var: str = right_index.data(QtCore.Qt.EditRole) try: return float(left_var) < float(right_var) except (ValueError, TypeError): pass try: return left_var < right_var except TypeError: return True class Counter(QtWidgets.QMainWindow): def __init__(self, parent=None): super(Counter, self).__init__(parent) self.setWindowFlags(QtCore.Qt.Window) QtWidgets.QMainWindow.__init__(self) font = QtGui.QFont("Formula1", 10, QtGui.QFont.Bold) self.setFont(font) central_widget = QtWidgets.QWidget() self.setCentralWidget(central_widget) grid_layout = QtWidgets.QGridLayout() central_widget.setLayout(grid_layout) self.model = QtGui.QStandardItemModel(self) self.model.setHorizontalHeaderLabels(["Name" , "Points"]) self.proxy = NumberSortModel() self.proxy.setSourceModel(self.model) self.table = CustomTableView(self) self.table.setModel(self.proxy) self.table.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch) update_button = QtWidgets.QPushButton("Update") update_button.clicked.connect(self.on_update_button) sort_button = QtWidgets.QPushButton("Sort") self.qlineedit_name = QtWidgets.QLineEdit() self.qlineedit_name.resize(24, 80) self.qlineedit_points = QtWidgets.QLineEdit() self.qlineedit_points.resize(24, 80) horisontal_layout = QtWidgets.QHBoxLayout() horisontal_layout.addWidget(self.qlineedit_name, stretch=1) horisontal_layout.addWidget(self.qlineedit_points, stretch=1) horisontal_layout.addStretch(1) horisontal_layout.addWidget(update_button) horisontal_layout.addWidget(sort_button) horisontal_layout.setAlignment(QtCore.Qt.AlignRight) grid_layout.addLayout(horisontal_layout, 0, 0) grid_layout.addWidget(self.table, 1, 0) settings = QtCore.QSettings("settings.ini", QtCore.QSettings.IniFormat) settings.setValue("Name", "Points") def on_update_button(self): name = self.qlineedit_name.text().strip() point = self.qlineedit_points.text().strip() if self.qlineedit_points.text().strip() else '0' if not point.isdigit(): msg = QtWidgets.QMessageBox.information(self, 'ВНИМАНИЕ', 'Заполните правильно поле ввода Points!') return msg if not name: msg = QtWidgets.QMessageBox.information(self, 'ВНИМАНИЕ', 'Заполните поле ввода Name!') return msg rows = self.table.model().rowCount() add_record = True for row in range(rows): if name == self.proxy.data(self.proxy.index(row, 0)): #print(name) add_record = False row_edit = row break if add_record: if self.table.selectedIndexes(): row = self.table.selectedIndexes()[-1].row() self.model.insertRow(row+1, [QtGui.QStandardItem(name), QtGui.QStandardItem(point)]) else: self.model.appendRow([QtGui.QStandardItem(name), QtGui.QStandardItem(point)]) else: self.model.setData(self.model.index(row_edit, 1), point, QtCore.Qt.EditRole) self.qlineedit_name.clear() self.qlineedit_points.clear() if __name__ == "__main__": application = QtWidgets.QApplication([]) window = Counter() window.setWindowTitle("Counter") window.setMinimumSize(480, 380) window.show() sys.exit(application.exec_())
-
Hi,
Set the organisation name and domain as shown in the QSettings documentation.
Note that the code snippet seems to still be c++ but it is easy to adapt.