如何使用PyQt4保存和恢复当前状态和值

时间:2017-12-09 11:42:11

标签: python pyqt pyqt4

我试图想出一种方法来保存当前状态和gui中的所有值,例如QLineEdit和QEditText小部件中的文本。

我发现这个code我一直在尝试使用它似乎我可以让它在我退出GUI时保存一切正常但是当我打开它时,所有它似乎恢复的是窗口尺寸如果我以前搬过它们的话。

我可以在ini文件中看到所有内容都被保存,包括2个小部件中的任何文本,但是当我打开GUI时,我无法恢复文本。有谁知道我怎样才能恢复文本值? 这是我目前正在使用的内容。

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

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(QWidget):
    settings = QSettings("gui.ini", QSettings.IniFormat)
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setObjectName("MainWindow")

        restore(self.settings)

        self.layout = QGridLayout()
        self.text_Box = QTextEdit(self)
        self.text_Box.setObjectName("text_Box")
        self.layout.addWidget(self.text_Box, 2, 0, 1, 1)
        self.quit_Button = QPushButton(self)
        self.quit_Button.setMaximumSize(30, 30)
        self.quit_Button.setObjectName("quit_Button")
        self.layout.addWidget(self.quit_Button, 3, 0, 1, 1)
        self.line_Edit = QLineEdit(self)
        self.line_Edit.setObjectName("line_Edit")
        self.layout.addWidget(self.line_Edit, 1, 0, 1, 1)
        self.quit_Button.clicked.connect(self.exitGUI)
        self.setLayout(self.layout)

    def closeEvent(self, event):
        save(self.settings)
        QWidget.closeEvent(self, event)

    def exitGUI(self):
        self.close()

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    mainwindow = MainWindow()
    mainwindow.show()
    sys.exit(app.exec_())

0 个答案:

没有答案