PyQt 4 - 应用关闭时将窗口所有数据保存到文件

3 投票
2 回答
2680 浏览
提问于 2025-04-16 11:39

有没有一种快速的方法,可以在应用程序关闭之前,把所有小部件里的数据都保存到文件里?当然,重新运行应用程序后,也能读取这些数据并恢复它们?

2 个回答

2

根据这个问题 如何记住PyQt应用程序的最后窗口位置和大小?,以及补充了 @Artur Gaspar 的回答,下面是一个完整的可运行示例:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from PyQt5.QtCore import QSettings, QPoint, QSize

class myApp(QMainWindow):

    def __init__(self):
        super( myApp, self ).__init__()
        self.settings = QSettings( 'My company', 'myApp' )

        # Initial window size/pos last saved. Use default values for first time
        windowScreenGeometry = self.settings.value( "windowScreenGeometry" )
        windowScreenState = self.settings.value( "windowScreenState" )

        if windowScreenGeometry:
            self.restoreGeometry( windowScreenGeometry )

        else:
            self.resize( 600, 400 )

        if windowScreenState:
            self.restoreState( windowScreenState )

    def closeEvent(self, e):
        # Write window size and position to config file
        self.settings.setValue( "windowScreenGeometry", self.saveGeometry() )
        self.settings.setValue( "windowScreenState", self.saveState() )
        e.accept()

if __name__ == '__main__':
    app = QApplication( sys.argv )
    frame = myApp()
    frame.show()
    app.exec_()
4

QWidget.saveGeometry 用来保存一个小部件的形状和位置。
QMainWindow.saveState 用来保存窗口里的工具栏和停靠窗口的状态。
如果你想保存其他的东西,可以使用 pickle。

撰写回答