python - 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
,该变量被重置回无。我想我错过了一些非常愚蠢的东西,但我无法理解它是什么。谢谢大家。
解决方案
推荐阅读
- hibernate - 如果列名与字段名不同,JPA 如何将列名映射到字段?
- javascript - Reactjs在所有组件中隐藏导航栏都有路径= /admin/
- angular - 为什么 Angular 错误消息(javascript 控制台)的格式如此奇怪?
- c# - 给定一个 URL,有没有办法确定从那里下载的文件?
- python-3.x - 使用 BeautifulSoup 函数提取文本时出现问题
- unit-testing - 用于检查模板中呈现的内容的单元测试
- python - 如何在 Catboost 预测方法中实现 select_threshold?
- python - Pandas Dataframe .loc + 更新非唯一日期时间索引?
- c++ - 如何共享成员继承类?
- solidity - 当我用松露测试智能合约时有问题