我面临一个问题,即保存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()
给了我这个:
我创建了一个带有QLineEdit和两个按钮(一个用于保存,一个用于加载)的窗口。然后我使用pickle将SurfViewer
类实例的self
保存到Savestate
函数中。然后我尝试用pickle self = pickle.load(filehandler)
重新加载先前的状态。因为我不能分配self
变量,所以看起来不会这么简单。
如果有人能在不手动保存每个变量的情况下给出一些见解。在
目前没有回答
相关问题 更多 >
编程相关推荐