是否可以保存qa应用程序的完整状态,然后重新加载它?

2024-05-13 05:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我面临一个问题,即保存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将SurfViewer类实例的self保存到Savestate函数中。然后我尝试用pickle self = pickle.load(filehandler)重新加载先前的状态。因为我不能分配self变量,所以看起来不会这么简单。 如果有人能在不手动保存每个变量的情况下给出一些见解。在


Tags: importselfreturndefbuttonfilenamepicklestate