PyQt学习笔记-使用QSettings保存系统配置参数

这篇具有很好参考价值的文章主要介绍了PyQt学习笔记-使用QSettings保存系统配置参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.QSettings简介

QSettings继承于QObject,位于PyQt6.QtCore模块中,是PyQt中用来存储配置信息的常用工具。

QSettings的API基于QVariant,允许您以最小的工作量保存大多数基于值的类型,例如QString,QRect和QImage。

可通过配置将应用程序需要保存的参数数据保存到本地,如windows的注册表,macOS 和 iOS 上的属性列表文件,linux的ini文本文件等。

2.初始化QSettings及数据存储位置

2.1 使用系统api存储

通过指定公司、软件信息初始化QSettings会将参数存储到系统默认的地方中,初始化方法如下:

    @typing.overload
    def __init__(self, organization: str, application: str = ..., parent: typing.Optional[QObject] = ...) -> None: ...
    @typing.overload
    def __init__(self, scope: 'QSettings.Scope', organization: str, application: str = ..., parent: typing.Optional[QObject] = ...) -> None: ...
    @typing.overload
    def __init__(self, format: 'QSettings.Format', scope: 'QSettings.Scope', organization: str, application: str = ..., parent: typing.Optional[QObject] = ...) -> None: ...
    @typing.overload
    def __init__(self, fileName: str, format: 'QSettings.Format', parent: typing.Optional[QObject] = ...) -> None: ...
    @typing.overload
    def __init__(self, scope: 'QSettings.Scope', parent: typing.Optional[QObject] = ...) -> None: ...
    @typing.overload
    def __init__(self, parent: typing.Optional[QObject] = ...) -> None: ...

不同的初始化有不同的配置信息存储位置,可供搜索的存储位置如下,软件会按顺序搜索:

1. 应用程序的用户特定位置;
2. 所属组织所有应用程序的用户特定位置;
3. app的系统范围位置;
4. 所属组织的的系统范围位置

假设组织为“MyORG”,应用程序名为“MyApp”:

构造函数 应用程序的用户特定位置 所属组织所有应用程序的用户特定位置 app的系统范围位置 所属组织的的系统范围位置
QSettings(“MyORG”,“MyApp”)
QSettings(“MyORG”) x
QSettings(QSettings.Scope.SystemScope, “MyORG”, “MyApp”) x x
QSettings(QSettings.Scope.SystemScope, “MyORG”) x x x

一般自动所有第一个找到的文件位置,其他位置的文件用作数据回退使用。根据系统不一样会存储到对用的注册表和配置文件夹路径。

2.2 存储成配置文件

2.2.1 使用文件格式设置

通过指定文件路径以及设置文件格式,可以将配置信息存储到成配置文件,并且存储到指定目录下。

QSettings("config.ini", QSettings.Format.IniFormat)

此处传入两个参数,一个是文件路径,第二个是文件格式。
如果ini文件不存在时系统会自动创建该文件。

2.2.2 Format格式说明

QSettings.Format格式

格式 Unix Windows
NativeFormat .conf 文件 系统注册表
IniFormat .ini 文件 .ini 文件

注:

  • 保存成ini文件的数值,读回时将会会以QString格式返回,需要自行转换类型。
  • 默认格式为NativeFormat。

3 Qsettings的使用

3.1 QSettings的数据保存和读取

3.1.1 使用setValue方法保存数据

qsettings.setValue("name", self.txt_name.text())

传入两个参数,第一个参数为键值,第二个参数为要保存的值。
当键值存在时会替换该数值,键值不存在时会创建相依的值。

3.1.2 使用value方法获取配置文件种的数据

qsettings.value("name")

使用键值直接获取对应的数据,获取到的数据可再根据自己需要进行类型转换。

3.2 节点和键值语法

QSettings中存储数据可以使用“/”作为分组依据,键值中包含“\”和“/”字符最终都会前置转换为“/”。
而由于部分系统键值不区分大小写(如Windows),而部分系统键值区分大小写(如mac),故设置键值时尽量使用统一的键值,而且避免存在仅大小写不一致的键值。
使用“/”进行分组,即“/”前的是组别,之后的是名称,用于区分不同的单元和分组保存数据,实际使用,存在多分组的时候可以使用beginGroup()即endGroup()类做同组数据保存;

	# App.config是一个QSettings类,我封装在App类中作为全局属性,方便调用	
    App.config.beginGroup("mainwindow")
    App.config.setValue("name", self.txt_name.text())
    print(self.mainview.txt_name.text())
    App.config.setValue("password", self.txt_password.text())
    print(self.mainview.txt_password.text())
    App.config.sync() # 直接保存,若不调用则一段时间后自动保存。
    App.config.endGroup()

结果如下:

111
这是密码
111
这是密码
# 添加分组后,键值会自动带上组别,并且以“/”划分
['mainwindow/name', 'mainwindow/password', 'name', 'password', 'size']

若多次使用分组管理,则会自行添加多个分组。

	# 多次使用分组管理
    App.config.beginGroup("mainwindow")
    App.config.beginGroup("login")
    App.config.setValue("name", self.txt_name.text())
    App.config.setValue("password", self.txt_password.text())
    App.config.sync() # 直接保存,若不调用则一段时间后自动保存。
    App.config.endGroup()
    App.config.endGroup()

结果:

['mainwindow/login/name', 'mainwindow/login/password', 'mainwindow/name', 'mainwindow/password', 'name', 'password', 'size']

3.3 常用方法介绍

3.3.1 使用allkeys()方法返回所有的键值

App.config.allKeys()
['mainwindow/login/name', 'mainwindow/login/password', 'mainwindow/name', 'mainwindow/password', 'name', 'password', 'size']

3.3.2 使用childGroups方法返回子级分组

App.config.childGroups()
childGroups :
['mainwindow']

3.3.3 使用childKeys方法返回子级键列表

App.config.childKeys()
childKeys :
['name', 'password', 'size']

3.3.4 使用clear方法清楚所有数据

   App.config.clear()
   print("clear : ")
   print(App.config.allKeys())
clear :
[]

此操作会删除数据,建议谨慎操作,一般使用remove方法代替,用于移除指定的分组或键值数据。

3.3.5 使用remove移除数据

remove(Union[QByteArray, str])
        App.config.remove("mainwindow")
        print("allKeys : ")
        print(App.config.allKeys())
allKeys :
['name', 'password']

注:

  • 要移除分组时需要先行调用beginGroup()方法。
  • 若键值参数设置为“”(空字符串),将会把所有的键值 全部清空

3.3.6 使用contains方法识别是否包含键值或者组

contains(Union[QByteArray, str])bool

键值查询时直接查询,若要查询分组,需要先行调用beginGroup()函数,然后在进行查询。文章来源地址https://www.toymoban.com/news/detail-731505.html

3.3.6 使用status查询状态

status() → Status
状态 说明
AccessError 1 访问错误(如尝试写入只读文件)
FormatError 2 格式错误(如加载错误的ini文件)
NoError 0 未发生错误

到了这里,关于PyQt学习笔记-使用QSettings保存系统配置参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于深度学习YOLOv8+PyQt5的水底海底垃圾生物探测器检测识别系统(源码+数据集+配置说明)

    wx供重浩:创享日记 对话框发送:323海底 获取完整源码+7000张数据集+配置说明+文件说明+远程操作配置环境跑通程序 效果展示 基于深度学习YOLOv8+PyQt5的水底海底垃圾生物探测器检测识别系统设计(源码+数据集+配置文件) 各文件说明 程序运行说明 ---------【第一步:安装py

    2024年03月24日
    浏览(75)
  • Qt 之 自定义配置文件类,QSettings应用

    目录 一、前言 二、头文件代码 三、源文件代码 四、使用示例 五、使用效果         在qt开发过程中,很多时候需要为软件添加配置,让软件在下一次打开时仍然保持上一次关闭时的设置。qt的配置类QSettings,本文通过继承QSettings实现自定义类,方便在代码中随时调用,另外

    2024年02月15日
    浏览(36)
  • Qt读写ini配置文件(QSettings)、XML

    1、ini相关的 总结:Qt读写ini配置文件(QSettings) - 布丁Plus - 博客园 (cnblogs.com) Qt读写ini文件(含源码+注释)_qt ini文件读写_lw向北.的博客-CSDN博客 2、XML相关的 Qt读写XML文件(含源码+注释)_qt写xml_lw向北.的博客-CSDN博客

    2024年02月11日
    浏览(54)
  • openGauss学习笔记-224 openGauss性能调优-系统调优-数据库系统参数调优-数据库并发队列参数调优

    数据库提供两种手段进行并发队列的控制,全局并发队列和局部并发队列。 224.1 全局并发队列 全局并发队列采用GUC参数max_active_statements控制数据库主节点上运行并发执行的作业数量。采用全局并发队列机制将控制所有普通用户的执行作业,不区分复杂度,即执行语句都将作

    2024年02月22日
    浏览(49)
  • Qt 中的 QSettings:配置文件的读写和应用场景

    在 Qt 应用程序中,QSettings 是一个强大的类,用于读取和写入应用程序的配置信息。本文将详细介绍 QSettings 的使用方法、应用场景以及相关注意事项,适合入门级别的读者。我们将提供高质量的示例代码和解释,以帮助您更好地理解和应用 QSettings。 QSettings 是 Qt 框架中用于

    2024年02月12日
    浏览(51)
  • 迈德威视MindVision相机配置文件的保存与加载/相机参数移植

    我们会遇到这样的情况,在一台电脑上(如我们自己的笔记本)安装了MindVision相机的驱动软件,想要使用MindVision相机成像。在我们搭建的成像环境下,假设想要对螺栓进行成像,我们可能调试出了一套合适的相机参数,包括曝光、增益等,然后在此基础上采集图像、进行后续

    2024年02月15日
    浏览(112)
  • PyQt5学习笔记--多线程处理、数据交互

    目录 1--引入多线程的原因 2--PyQt多线程的基本知识 3--多线程登录程序的实例 4--参考 ① 如果Qt只采用单线程任务的方式,当遇到数据处理慢的情形时,会出现GUI卡死的情况。 ② 使用下述例子展示单线程任务的缺陷: ③ 代码: ④ 结果展示: 当点击第一个button时,GUI会出现卡

    2023年04月16日
    浏览(52)
  • PyQt5学习笔记--加载Qt Designer设计的ui文件

    目录 1--直接加载ui文件 2--动态加载ui文件及其属性 3--绑定槽函数测试 4--登录程序实例练习 ① Qt Designer 下载地址​​​​​ ② 设计ui并保存导出   ③ 直接加载代码 ​ ① 在Qt Designer设计ui文件:   ② 源程序: ③ 结果测试  

    2024年02月10日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包