Сохранение данных QDoubleSpinBox из интерфейса PyQt
У меня в интерфейсе очень много окошек класса QDoubleSpinBox.
Соответственно каждый раз при запуске программы данные в них обнуляются.
Я задумал сделать кнопки сохранения и открытия файла сохранения, дабы каждый раз не вводить всё заново.
Я создал метод save_infile(self), который вызывается по нажатию кнопки "сохранить" и в нём прописал функцию автоматического поиска этих самых QDoubleSpinBox, а именно:
self.ui.tabs = self.ui.scrollAreaWidget_bvr.findChildren(QtWidgets.QDoubleSpinBox)
Метод работает, однако он делает список из объектов PyQt6, который каждый раз разные. Да и сохранить их нельзя через pickle. А даже если я через метод value() проитерирую список и сохраню новый со значениями, то потом не факт что значения встанут на свои места.
Я попробовал, действительно встают в рандомные места, вот реализация:
def save_infile(self):
self.ui.tabs = self.ui.scrollAreaWidget_bvr.findChildren(QtWidgets.QDoubleSpinBox)
self.ui.tabs_scar = []
for i in self.ui.tabs:
self.ui.tabs_scar.append(i.value())
sf_data = self.ui.tabs_scar
sf = open(r"Geo_Data.txt", "wb")
pickle.dump(sf_data, sf)
sf.close()
print("Save Successes")
def open_savefile(self):
sl = open(r"Geo_Data.txt", "rb")
sl_data = pickle.load(sl)
sl.close()
self.ui.tabs = self.ui.scrollAreaWidget_bvr.findChildren(QtWidgets.QDoubleSpinBox)
index = 0
for i in self.ui.tabs:
i.setValue(sl_data[index])
index += 1
print("Open Successes")
В общем мой вопрос как бы вы лучше сделали эту функцию и как сохранить данные из QDoubleSpinBox в файл чтобы потом из него же их и загрузить?
Ещё я пробовал через objectName() виджетов, но в таком случае когда я хочу задать новое значение, программа не понимает к какому объекту ссылаться, потому названия виджетов в словаре храняться как string:
import copy, pprint
import Question_int as interf
from PyQt6 import QtCore,QtWidgets,QtGui
import pickle
class MainWindow(QtWidgets.QMainWindow):
def __init__(self,parent=None):
super(MainWindow, self).__init__(parent)
self.ui = interf.Ui_MainWindow()
self.ui.setupUi(self)
#menu actions
self.ui.actionSave.triggered.connect(self.save_infile)
self.ui.actionOpen.triggered.connect(self.open_savefile)
def save_infile(self):
self.ui.tabs = self.ui.scrollAreaWidget_bvr.findChildren(QtWidgets.QDoubleSpinBox)
self.ui.tabs_names = []
self.ui.tabs_values = []
for i in self.ui.tabs:
self.ui.tabs_names.append(i.objectName())
for i in self.ui.tabs:
self.ui.tabs_values.append(i.value())
sf_data = dict(zip(self.ui.tabs_names,self.ui.tabs_values))
sf = open(r"TEST.txt", "wb")
pickle.dump(sf_data, sf)
sf.close()
print("Save Successes")
def open_savefile(self):
sl = open(r"TEST.txt", "rb")
sl_data = pickle.load(sl)
sl.close()
self.ui.tabs_names = []
self.ui.tabs_values = []
self.ui.tabs_names = list(sl_data.keys())
self.ui.tabs_values = list(sl_data.values())
index = 0
for i in self.ui.tabs_names:
i.setValue(self.ui.tabs_values[index])
index += 1
print("Open Successes") #(нет)
if __name__== "__main__":
import sys
app = interf.QtWidgets.QApplication(sys.argv)
Form = MainWindow()
Form.show()
sys.exit(app.exec())
Интерфейс для копирования:
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(678, 824)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_3.setObjectName("gridLayout_3")
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
self.line.setObjectName("line")
self.gridLayout_3.addWidget(self.line, 1, 0, 1, 2)
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setTabPosition(QtWidgets.QTabWidget.TabPosition.North)
self.tabWidget.setTabShape(QtWidgets.QTabWidget.TabShape.Rounded)
self.tabWidget.setObjectName("tabWidget")
self.tab_bvr = QtWidgets.QWidget()
self.tab_bvr.setMaximumSize(QtCore.QSize(16777215, 1359))
self.tab_bvr.setObjectName("tab_bvr")
self.gridLayout_4 = QtWidgets.QGridLayout(self.tab_bvr)
self.gridLayout_4.setObjectName("gridLayout_4")
self.scrollArea_bvr = QtWidgets.QScrollArea(self.tab_bvr)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.scrollArea_bvr.sizePolicy().hasHeightForWidth())
self.scrollArea_bvr.setSizePolicy(sizePolicy)
self.scrollArea_bvr.setMouseTracking(False)
self.scrollArea_bvr.setAccessibleDescription("")
self.scrollArea_bvr.setWidgetResizable(True)
self.scrollArea_bvr.setObjectName("scrollArea_bvr")
self.scrollAreaWidget_bvr = QtWidgets.QWidget()
self.scrollAreaWidget_bvr.setGeometry(QtCore.QRect(0, 0, 634, 710))
self.scrollAreaWidget_bvr.setAutoFillBackground(True)
self.scrollAreaWidget_bvr.setObjectName("scrollAreaWidget_bvr")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.scrollAreaWidget_bvr)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.subtabs_bvr = QtWidgets.QTabWidget(self.scrollAreaWidget_bvr)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.subtabs_bvr.sizePolicy().hasHeightForWidth())
self.subtabs_bvr.setSizePolicy(sizePolicy)
self.subtabs_bvr.setAutoFillBackground(False)
self.subtabs_bvr.setTabPosition(QtWidgets.QTabWidget.TabPosition.North)
self.subtabs_bvr.setElideMode(QtCore.Qt.TextElideMode.ElideNone)
self.subtabs_bvr.setUsesScrollButtons(True)
self.subtabs_bvr.setObjectName("subtabs_bvr")
self.tab_bvr_overall = QtWidgets.QWidget()
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.tab_bvr_overall.sizePolicy().hasHeightForWidth())
self.tab_bvr_overall.setSizePolicy(sizePolicy)
self.tab_bvr_overall.setMinimumSize(QtCore.QSize(0, 0))
self.tab_bvr_overall.setMaximumSize(QtCore.QSize(16777215, 380))
self.tab_bvr_overall.setAcceptDrops(True)
self.tab_bvr_overall.setAutoFillBackground(False)
self.tab_bvr_overall.setObjectName("tab_bvr_overall")
self.gridLayout = QtWidgets.QGridLayout(self.tab_bvr_overall)
self.gridLayout.setObjectName("gridLayout")
self.InputData_01 = QtWidgets.QScrollArea(self.tab_bvr_overall)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.InputData_01.sizePolicy().hasHeightForWidth())
self.InputData_01.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setStyleStrategy(QtGui.QFont.StyleStrategy.PreferAntialias)
self.InputData_01.setFont(font)
self.InputData_01.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
self.InputData_01.setMouseTracking(False)
self.InputData_01.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.DefaultContextMenu)
self.InputData_01.setAccessibleDescription("")
self.InputData_01.setAutoFillBackground(False)
self.InputData_01.setStyleSheet("")
self.InputData_01.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
self.InputData_01.setLineWidth(1)
self.InputData_01.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded)
self.InputData_01.setWidgetResizable(True)
self.InputData_01.setObjectName("InputData_01")
self.scrollArea_overall = QtWidgets.QWidget()
self.scrollArea_overall.setEnabled(True)
self.scrollArea_overall.setGeometry(QtCore.QRect(0, 0, 590, 360))
self.scrollArea_overall.setObjectName("scrollArea_overall")
self.gridLayout_2 = QtWidgets.QGridLayout(self.scrollArea_overall)
self.gridLayout_2.setObjectName("gridLayout_2")
self.input_overall_03 = QtWidgets.QDoubleSpinBox(self.scrollArea_overall)
self.input_overall_03.setMaximumSize(QtCore.QSize(75, 16777215))
self.input_overall_03.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_03.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_03.setPrefix("")
self.input_overall_03.setSuffix("")
self.input_overall_03.setMaximum(3000.99)
self.input_overall_03.setObjectName("input_overall_03")
self.gridLayout_2.addWidget(self.input_overall_03, 2, 0, 1, 1)
self.input_overall_02 = QtWidgets.QDoubleSpinBox(self.scrollArea_overall)
self.input_overall_02.setMaximumSize(QtCore.QSize(75, 16777215))
self.input_overall_02.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_02.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_02.setPrefix("")
self.input_overall_02.setSuffix("")
self.input_overall_02.setDecimals(0)
self.input_overall_02.setMaximum(3001.0)
self.input_overall_02.setProperty("value", 0.0)
self.input_overall_02.setObjectName("input_overall_02")
self.gridLayout_2.addWidget(self.input_overall_02, 1, 0, 1, 1)
self.input_overall_01 = QtWidgets.QDoubleSpinBox(self.scrollArea_overall)
self.input_overall_01.setMaximumSize(QtCore.QSize(75, 16777215))
self.input_overall_01.setAutoFillBackground(False)
self.input_overall_01.setWrapping(True)
self.input_overall_01.setFrame(True)
self.input_overall_01.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_01.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_01.setSpecialValueText("")
self.input_overall_01.setCorrectionMode(QtWidgets.QAbstractSpinBox.CorrectionMode.CorrectToPreviousValue)
self.input_overall_01.setPrefix("")
self.input_overall_01.setSuffix("")
self.input_overall_01.setMaximum(3000.99)
self.input_overall_01.setObjectName("input_overall_01")
self.gridLayout_2.addWidget(self.input_overall_01, 0, 0, 1, 1)
self.InputData_01.setWidget(self.scrollArea_overall)
self.gridLayout.addWidget(self.InputData_01, 0, 0, 1, 1)
self.subtabs_bvr.addTab(self.tab_bvr_overall, "")
self.tab_bvr_drilling = QtWidgets.QWidget()
self.tab_bvr_drilling.setMaximumSize(QtCore.QSize(16777215, 280))
self.tab_bvr_drilling.setObjectName("tab_bvr_drilling")
self.gridLayout_6 = QtWidgets.QGridLayout(self.tab_bvr_drilling)
self.gridLayout_6.setObjectName("gridLayout_6")
self.InputData_02 = QtWidgets.QScrollArea(self.tab_bvr_drilling)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.InputData_02.sizePolicy().hasHeightForWidth())
self.InputData_02.setSizePolicy(sizePolicy)
self.InputData_02.setMaximumSize(QtCore.QSize(16777215, 16777215))
font = QtGui.QFont()
font.setFamily("MS Serif")
font.setStyleStrategy(QtGui.QFont.StyleStrategy.PreferAntialias)
self.InputData_02.setFont(font)
self.InputData_02.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.SizeAdjustPolicy.AdjustIgnored)
self.InputData_02.setWidgetResizable(True)
self.InputData_02.setObjectName("InputData_02")
self.scrollArea_drilling = QtWidgets.QWidget()
self.scrollArea_drilling.setGeometry(QtCore.QRect(0, 0, 590, 260))
self.scrollArea_drilling.setObjectName("scrollArea_drilling")
self.gridLayout_5 = QtWidgets.QGridLayout(self.scrollArea_drilling)
self.gridLayout_5.setObjectName("gridLayout_5")
self.input_drilling_02 = QtWidgets.QDoubleSpinBox(self.scrollArea_drilling)
self.input_drilling_02.setMaximumSize(QtCore.QSize(75, 16777215))
font = QtGui.QFont()
font.setFamily("MS Shell Dlg 2")
self.input_drilling_02.setFont(font)
self.input_drilling_02.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_drilling_02.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_drilling_02.setMaximum(3000.99)
self.input_drilling_02.setObjectName("input_drilling_02")
self.gridLayout_5.addWidget(self.input_drilling_02, 1, 0, 1, 1)
self.input_drilling_01 = QtWidgets.QDoubleSpinBox(self.scrollArea_drilling)
self.input_drilling_01.setMaximumSize(QtCore.QSize(75, 16777215))
font = QtGui.QFont()
font.setFamily("MS Shell Dlg 2")
self.input_drilling_01.setFont(font)
self.input_drilling_01.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_drilling_01.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_drilling_01.setMaximum(3000.99)
self.input_drilling_01.setObjectName("input_drilling_01")
self.gridLayout_5.addWidget(self.input_drilling_01, 0, 0, 1, 1)
self.InputData_02.setWidget(self.scrollArea_drilling)
self.gridLayout_6.addWidget(self.InputData_02, 0, 0, 1, 1)
self.subtabs_bvr.addTab(self.tab_bvr_drilling, "")
self.verticalLayout_2.addWidget(self.subtabs_bvr)
self.scrollArea_bvr.setWidget(self.scrollAreaWidget_bvr)
self.gridLayout_4.addWidget(self.scrollArea_bvr, 0, 0, 1, 1)
self.tabWidget.addTab(self.tab_bvr, "")
self.gridLayout_3.addWidget(self.tabWidget, 0, 0, 1, 2)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 678, 21))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionNew = QtGui.QAction(MainWindow)
self.actionNew.setObjectName("actionNew")
self.actionOpen = QtGui.QAction(MainWindow)
self.actionOpen.setObjectName("actionOpen")
self.actionSave = QtGui.QAction(MainWindow)
self.actionSave.setObjectName("actionSave")
self.actionSave_as = QtGui.QAction(MainWindow)
self.actionSave_as.setObjectName("actionSave_as")
self.actionExit = QtGui.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
self.actionExport = QtGui.QAction(MainWindow)
self.actionExport.setObjectName("actionExport")
self.actionEdit = QtGui.QAction(MainWindow)
self.actionEdit.setObjectName("actionEdit")
self.actionCalculate_all = QtGui.QAction(MainWindow)
self.actionCalculate_all.setObjectName("actionCalculate_all")
self.actionGlossary = QtGui.QAction(MainWindow)
self.actionGlossary.setObjectName("actionGlossary")
self.actionHelp = QtGui.QAction(MainWindow)
self.actionHelp.setObjectName("actionHelp")
self.actionAbout_GeoGraph = QtGui.QAction(MainWindow)
self.actionAbout_GeoGraph.setObjectName("actionAbout_GeoGraph")
self.import_xlsx = QtGui.QAction(MainWindow)
self.import_xlsx.setObjectName("import_xlsx")
self.actionCSV_File = QtGui.QAction(MainWindow)
self.actionCSV_File.setObjectName("actionCSV_File")
self.menuFile.addAction(self.actionOpen)
self.menuFile.addAction(self.actionSave)
self.menuFile.addSeparator()
self.menuFile.addSeparator()
self.menuFile.addSeparator()
self.menubar.addAction(self.menuFile.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
self.subtabs_bvr.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Question"))
self.subtabs_bvr.setTabText(self.subtabs_bvr.indexOf(self.tab_bvr_overall), _translate("MainWindow", "subtab1"))
self.subtabs_bvr.setTabText(self.subtabs_bvr.indexOf(self.tab_bvr_drilling), _translate("MainWindow", "subtab2"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_bvr), _translate("MainWindow", "tab1"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.actionNew.setText(_translate("MainWindow", "New"))
self.actionOpen.setText(_translate("MainWindow", "Open"))
self.actionSave.setText(_translate("MainWindow", "Save"))
self.actionSave_as.setText(_translate("MainWindow", "Save as"))
self.actionExit.setText(_translate("MainWindow", "Exit"))
self.actionExport.setText(_translate("MainWindow", "Export..."))
self.actionEdit.setText(_translate("MainWindow", "Edit"))
self.actionCalculate_all.setText(_translate("MainWindow", "Calculate all"))
self.actionGlossary.setText(_translate("MainWindow", "Glossary"))
self.actionHelp.setText(_translate("MainWindow", "Help"))
self.actionAbout_GeoGraph.setText(_translate("MainWindow", "About GeoGraph"))
self.import_xlsx.setText(_translate("MainWindow", "Excel File"))
self.actionCSV_File.setText(_translate("MainWindow", "CSV File"))
Ответы (1 шт):
Я взял пример из предыдущего вашего вопроса.
Класс QSettings обеспечивает постоянные настройки приложения, не зависящие от платформы.
QSettings - это абстракция этих технологий, позволяющая сохранять и восстанавливать настройки приложения переносимым способом. Он также поддерживает настраиваемые форматы хранения.
'''
from PyQt6 import QtCore, QtGui, QtWidgets
'''
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 480)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.input_overall_1 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_1.setAutoFillBackground(False)
self.input_overall_1.setWrapping(True)
self.input_overall_1.setFrame(True)
self.input_overall_1.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_1.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_1.setSpecialValueText("")
self.input_overall_1.setCorrectionMode(QtWidgets.QAbstractSpinBox.CorrectionMode.CorrectToPreviousValue)
self.input_overall_1.setPrefix("")
self.input_overall_1.setSuffix("")
self.input_overall_1.setMaximum(3000.99)
self.input_overall_1.setObjectName("input_overall_1")
self.gridLayout.addWidget(self.input_overall_1, 0, 0, 1, 1)
self.input_overall_2 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_2.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_2.setPrefix("")
self.input_overall_2.setSuffix("")
self.input_overall_2.setMaximum(3000.99)
self.input_overall_2.setObjectName("input_overall_2")
self.gridLayout.addWidget(self.input_overall_2, 1, 0, 1, 1)
self.input_overall_3 = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.input_overall_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.input_overall_3.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons)
self.input_overall_3.setPrefix("")
self.input_overall_3.setSuffix("")
self.input_overall_3.setMaximum(3000.99)
self.input_overall_3.setObjectName("input_overall_3")
self.gridLayout.addWidget(self.input_overall_3, 2, 0, 1, 1)
self.calc_button = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12)
self.calc_button.setFont(font)
self.calc_button.setStyleSheet("background-color: rgb(213, 213, 213);")
self.calc_button.setObjectName("calc_button")
self.gridLayout.addWidget(self.calc_button, 3, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.calc_button.setText(_translate("MainWindow", "Расчёт"))
CONFIG_FILE_NAME = 'config_q1330905.ini' # !!! сюда будем сохранять
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.doubleSpinBoxs = self.findChildren(QtWidgets.QDoubleSpinBox)
#print(f'doubleSpinBoxs = {self.doubleSpinBoxs}')
# +++
self.load_settings() # +++
for dsb in self.doubleSpinBoxs:
dsb.valueChanged.connect(
lambda val, dsb=dsb: self.gather_data(val, dsb))
self.calc_button.clicked.connect(self.on_clicked)
def on_clicked(self):
rez = 0
for dsb in self.doubleSpinBoxs:
rez += dsb.value()
print(f"Button Pushed: rez = {rez}")
def gather_data(self, val, dsb):
txt = dsb.value()
print(f'{dsb.objectName()}: {val} <----> {txt}')
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def save_settings(self):
settings = QtCore.QSettings(CONFIG_FILE_NAME, QtCore.QSettings.IniFormat)
settings.setValue('Geometry', self.saveGeometry())
settings.setValue('WindowState', self.saveState())
for doubleSpinBox in self.doubleSpinBoxs:
obj = doubleSpinBox.objectName()
settings.setValue(obj, doubleSpinBox.value())
def load_settings(self):
settings = QtCore.QSettings(CONFIG_FILE_NAME, QtCore.QSettings.IniFormat)
geometry = settings.value('Geometry')
if geometry:
self.restoreGeometry(geometry)
state = settings.value('WindowState')
if state:
self.restoreState(state)
for doubleSpinBox in self.doubleSpinBoxs:
obj = doubleSpinBox.objectName()
doubleSpinBox.setValue(float(settings.value(obj, 0)))
def closeEvent(self, e):
self.save_settings()
super().closeEvent(e)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__== "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = MainWindow()
Form.show()
sys.exit(app.exec())
