PyQt5 - Статическая переменная QSettings теряет свое значение после первого использования и превращается в None - PullRequest
0 голосов
/ 16 октября 2019

У меня проблема с проектом Python 3.6 / 7 в PyQt5. В моем основном файле у меня есть что-то вроде этого:

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, эта переменная сбрасывается обратно в None. Я думаю, что упускаю что-то очень глупое, но я не могу понять, что это такое. Спасибо всем заранее.

...