是否可以保存QApplication的完整状态并在之后重新加载?

时间:2017-02-28 09:09:07

标签: python pyqt save load pickle

我面临一个问题,即保存Qt窗口应用程序的完整状态。 我想要的是保存一个文件,其中包含有关窗口的所有内容,然后,如果我需要,我可以重新加载它以获得与之前所有变量相同的窗口(重新加载它们的值)

例如,我有这段代码

import pickle
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys


class SurfViewer(QMainWindow):
    def __init__(self, parent=None):
        super(SurfViewer, self).__init__()
        self.parent = parent
        self.centralWidget = QWidget()
        self.color = self.centralWidget.palette().color(QPalette.Background)
        self.setCentralWidget(self.centralWidget)
        self.plotview = QGroupBox(" ")
        self.layout_plotview = QVBoxLayout()
        self.test = QLineEdit('0.0')
        self.Button_Loadstate = QPushButton('Load state')
        self.Button_Savestate = QPushButton('Save state')
        self.layout_plotview.addWidget(self.test)
        self.layout_plotview.addWidget(self.Button_Savestate)
        self.layout_plotview.addWidget(self.Button_Loadstate)
        self.centralWidget.setLayout(self.layout_plotview)


        self.Button_Savestate.clicked.connect(self.Savestate)
        self.Button_Loadstate.clicked.connect(self.Loadstate)


    def Savestate(self,):
        fileName = QFileDialog.getSaveFileName(self,'Save State')
        if  (fileName[0] == '') :
            return
        file_pi = open(fileName[0] + '.state', 'wb')
        pickle.dump(self, file_pi)
        file_pi.close()
        return

    def Loadstate(self,):
        fileName = QFileDialog.getOpenFileName(self,'Load State' , "", "data files (*.state)")
        if  (fileName[0] == '') :
            return
        filehandler = open(fileName[0], 'rb')
        self = pickle.load(filehandler)
        filehandler.close()
        return


def main():
    app = QApplication(sys.argv)
    ex = SurfViewer(app)
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

给我这个:

enter image description here

我创建了一个带有QLineEdit和两个按钮的窗口(一个用于保存,一个用于加载)。然后我使用pickle将self类实例的SurfViewer保存在Savestate函数中。然后我尝试用pickle self = pickle.load(filehandler)重新加载以前的状态。它似乎不会那么简单,因为我无法分配self变量。 如果有人可以提供一些见解来执行,而不用手动保存每个变量。

0 个答案:

没有答案