По этой ссылке https://gist.github.com/eyllanesc/be8a476bb7038c7579c58609d7d0f031 функции сохранения и восстановления настроек сохраняют только одну вкладку виджетов, при добавлении другой вкладки с некоторыми виджетами она сохраняет активную вкладку при закрытии приложения. В этом обновленном коде
import sys
from PyQt5.QtCore import QFileInfo, QSettings
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import qApp, QApplication, QMainWindow, QFormLayout, QLineEdit, QTabWidget, QWidget, QAction
def restore(settings):
finfo = QFileInfo(settings.fileName())
if finfo.exists() and finfo.isFile():
for w in qApp.allWidgets():
mo = w.metaObject()
if w.objectName() != "":
for i in range(mo.propertyCount()):
name = mo.property(i).name()
val = settings.value("{}/{}".format(w.objectName(), name), w.property(name))
w.setProperty(name, val)
def save(settings):
for w in qApp.allWidgets():
mo = w.metaObject()
if w.objectName() != "":
for i in range(mo.propertyCount()):
name = mo.property(i).name()
settings.setValue("{}/{}".format(w.objectName(), name), w.property(name))
class mainwindow(QMainWindow):
settings = QSettings("g.ini", QSettings.IniFormat)
def __init__(self, parent=None):
super(mainwindow, self).__init__(parent)
self.setObjectName("MainWindow")
self.initUI()
restore(self.settings)
def initUI(self):
exitAction = QAction(QIcon('icon\\exit.png'), 'Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(self.close)
self.toolbar = self.addToolBar('Exit')
self.toolbar.setMovable(False)
self.toolbar.addAction(exitAction)
self.tab_widget = QTabWidget(self) # add tab
self.tab_widget.setObjectName("tabWidget")
self.tab2 = QWidget()
self.tab2.setObjectName("tab2")
self.tab_widget.addTab(self.tab2, "Tab_2")
self.tab3 = QWidget()
self.tab3.setObjectName("tab3")
self.tab_widget.addTab(self.tab3, "Tab_3")
self.tab2UI()
self.setCentralWidget(self.tab_widget)
def tab2UI(self):
self.layout = QFormLayout()
self.layout2 = QFormLayout()
nameLe = QLineEdit(self)
nameLe.setObjectName("nameLe")
self.layout.addRow("Name", nameLe)
nameLe2 = QLineEdit(self)
nameLe2.setObjectName("nameLe2")
self.layout2.addRow("Name", nameLe2)
addressLe = QLineEdit()
addressLe.setObjectName("addressLe")
self.layout.addRow("Address", addressLe)
addressLe2 = QLineEdit()
addressLe2.setObjectName("addressLe2")
self.layout2.addRow("Address", addressLe2)
self.tab2.setLayout(self.layout)
self.tab3.setLayout(self.layout2)
def closeEvent(self, event):
save(self.settings)
QMainWindow.closeEvent(self, event)
def main():
app = QApplication(sys.argv)
ex = mainwindow()
ex.setGeometry(100, 100, 1000, 600)
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
есть какая-либо функция для сохранения файла .ini для мульти вкладок QTabWidgets или любой другой способ сохранить все виджеты во всех вкладках.
Любые советы будут оценены по достоинству.