PySide/PyQt5 QSettings 未保存到 HKEY_LOCAL_MACHINE

Posted

技术标签:

【中文标题】PySide/PyQt5 QSettings 未保存到 HKEY_LOCAL_MACHINE【英文标题】:PySide/PyQt5 QSettings not saving to HKEY_LOCAL_MACHINE 【发布时间】:2020-04-24 19:14:54 【问题描述】:

我正在尝试保存应用程序和“组织”特定数据,并选择使用QSettings 类。事情总体上运行良好,但是我发现我无法保存到HKEY_LOCAL_MACHINE 注册表,当您将QSettings 范围设置为 System.我制作了一个精简的应用程序来尝试保存到所有四个位置,如下所示。

application_user_settingscompany_user_settings 保存在正确的位置,但 application_system_settingscompany_system_settings 根本不保存。此外,在下面的脚本中,我为每个实例打印出QSettingsfileName,它们打印出预期的路径。

我认为这可能是管理员权限问题,所以我重新打开了我正在使用的 IDE Pycharm,并以管理员身份运行它,它应该以管理员身份运行所有 python 文件。即使在此之后,我仍然遇到同样的问题。

有人知道为什么QSettings 没有正确保存到系统范围吗?

import sys
from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtCore import QSettings

app = QApplication(sys.argv)

window = QMainWindow()
window.show()


application_user_settings = QSettings('Company_Name', 'Application_Name')
application_user_settings.setValue('bruh_user', 1.0)
print(application_user_settings.fileName())  # \HKEY_CURRENT_USER\Software\Company_Name\Application_Name

company_user_settings = QSettings('Company_Name')
company_user_settings.setValue('bruh_user', 1.0)
print(company_user_settings.fileName())  # \HKEY_CURRENT_USER\Software\Company_Name\OrganizationDefaults

application_system_settings = QSettings(QSettings.SystemScope, 'Company_Name', 'Application_Name')
application_system_settings.setValue('bruh_system', 2.0)
print(application_system_settings.fileName())  # \HKEY_LOCAL_MACHINE\Software\Company_Name\Application_Name

company_system_settings = QSettings(QSettings.SystemScope, 'Company_Name')
company_system_settings.setValue('bruh_system', 2.0)
print(company_system_settings.fileName())  # \HKEY_LOCAL_MACHINE\Software\Company_Name\OrganizationDefaults


app.exec_()

HKEY_CURRENT_USER\SOFTWARE

HKEY_LOCAL_MACHINE\SOFTWARE

【问题讨论】:

【参考方案1】:

以管理员身份运行 pycharm 显然实际上并没有以管理员权限运行 python 脚本。您需要以管理员身份打开一个命令窗口,然后通过它运行您的 python 脚本。我刚刚遇到了同样的问题,这种技术解决了它。在以前版本的 python2 或 qt4(不确定是哪个,但可能是 qt4)中......代码将更新注册表而无需使用管理员运行。在我的用例中,这实际上很烦人。我希望在不需要管理员的情况下在 SystemScope 进行更新:(

【讨论】:

以上是关于PySide/PyQt5 QSettings 未保存到 HKEY_LOCAL_MACHINE的主要内容,如果未能解决你的问题,请参考以下文章

PySide2(PyQt5)根据屏幕大小初始化窗口大小

PySide2(PyQt5) 实现tab切换及方法详解(不定时更新)

pythonGUI-PySide2的使用笔记

pyqt5应用程序中对话框和主窗口的国际化(翻译)

QSettings - ini 文件的位置在哪里?

QSettings 类