сохранять qwidgets в нескольких вкладках QTabWidget PyQt5 - PullRequest
0 голосов
/ 24 февраля 2020

По этой ссылке 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 или любой другой способ сохранить все виджеты во всех вкладках.

Любые советы будут оценены по достоинству.

...