首页 > 解决方案 > PyQt5 - 静态 QSettings 变量在首次使用后失去它的值并变为无

问题描述

我在 PyQt5 中遇到了 Python 3.6/7 项目的问题。在我的主文件中,我有这样的东西:

if __name__ == '__main__':
    ...

    app = QApplication(sys.argv)
    app.setOrganizationName("ORGANIZATION_NAME")
    app.setOrganizationDomain("ORGANIZATION_DOMAIN")
    app.setApplicationName("APPLICATION_NAME")
    app.setApplicationVersion("APPLICATION_VERSION_CODE")

    SettingsUtils.initializeSettings()

    # Install translators
    ...

    value: list = SettingsUtils.getSettingValue("key")

    if len(value) == 0:
        window: Window = Window()
        window.show()

    ...

    # Run application until it terminates
    sys.exit(app.exec_())

然后在 SettingsUtils 类中:

class SettingsUtils:
    __SETTINGS: QSettings = None
    __SETTINGS_FILE_NAME: str = "./mySettings.ini"

    @classmethod
    def initializeSettings(cls) -> None:
        cls.__SETTINGS = QSettings(
            QSettings.IniFormat,
            QSettings.UserScope,
            "ORGANIZATION_NAME",
            "APPLICATION_NAME"
        )
        cls.__SETTINGS.setPath(QSettings.IniFormat, QSettings.UserScope, cls.__SETTINGS_FILE_NAME)
        cls.__SETTINGS.setFallbacksEnabled(False)

    @classmethod
    def getSettingValue(cls, key: str, valueType: type) -> Any:
        if cls.__SETTINGS is None:
            raise Exception("Settings not instantiated")

        ...

        return cls.__SETTINGS.value(key, defaultValue, type=valueType)

    @classmethod
    def setSettingValue(cls, key: str, value: Any) -> None:
        if cls.__SETTINGS is None:
            raise Exception("Settings not instantiated")

        ...

        cls.__SETTINGS.setValue(key, value)
        cls.__SETTINGS.sync()

在类 Window 的构造函数中,这是一个 QWidget,总而言之,我使用了另外几次SettingsUtils.getSettingValue("key").

因此,如您所见,我从主脚本初始化类的__SETTINGS静态成员SettingsUtils,然后使用它从主脚本中再次从设置中读取值,然后在构造函数中再次使用它几次Window班级。问题是__SETTINGS变量,当我第一次使用它时,它被正确实例化,但是当我从构造函数再次读取它时Window,该变量被重置回无。我想我错过了一些非常愚蠢的东西,但我无法理解它是什么。谢谢大家。

标签: pythonpyqt5python-3.6qsettings

解决方案


推荐阅读