PyQt5随笔:QSettings 的简单使用详说,进行软件的设置状态数据储存与初始化

您所在的位置:网站首页 登峰软件参数设置怎么保存 PyQt5随笔:QSettings 的简单使用详说,进行软件的设置状态数据储存与初始化

PyQt5随笔:QSettings 的简单使用详说,进行软件的设置状态数据储存与初始化

2024-07-13 06:05:39| 来源: 网络整理| 查看: 265

1.前言

一般来说,在PyQt5开发软件中,我们希望开发的用户界面软件进过使用后可以记录最后使用的状态,在再次打开软件时可以恢复。省的我们又要浪费时间来再设置一次。

PyQt5中的QSettings 就有这样的作用,他可以用来记录一些简单的软件设置,小数据等软件使用信息。在再次启动软件时,软件就会读取之前保存的QSettings 的数据进行初始化。

2.QSettings 的创建与使用

(1)创建QSettings 对象

方式1.

传递给QSettings 两个参数,第一个是你公司或者组织的名称如:Mysoft,第二个事你的应用程序的名称如:test。来创建一个QSettings 对象

self.app_data = QSettings('Mysoft', 'test')

说明:如果要存储的数据不是很大,推荐用这种方式。 

这代码是在总代码中截取的,self. 是类中的关键字。如果不建类来测试,要把self. 去掉。总代码看文章后面。

方式2.

self.app_data = QSettings('config.ini', QSettings.IniFormat) self.app_data.setIniCodec('UTF-8') # 设置ini文件编码为 UTF-8

第二种方式是通过创建 ini 文件来存储数据,‘config.ini’是文件名,可以自定义。

如果不设置编码为 utf-8 ,直接用笔记本软件打看 ini 文件的中文是乱码的,不利于直接查看阅读 ini 文件。

缺点:如果你的程序还设置了开机自启动的话,开机后打开的程序不会读取 ini 文件进行初始化的,(不知是不是pyqt5的bug,我的是pyqt5 5.15.0 版本),但方式1 就会读取QSettings 对象的数据进行初始化。如果没有设置自启动的话,就没有影响了。

 

(2)把数据写入QSettings 对象中

def save_info(self): time = QDateTime.currentDateTime() #获取当前时间,并存储在self.qpp_data self.app_data.setValue('time', time.toString()) #数据0:time.toString()为字符串类型 self.text = self.textEdit.toPlainText()#获取当前文本框的内容 self.app_data.setValue('self.text1', self.text)#数据1:也是字符串类型 a = 1 #数据3:数值类型 list = [1,'a',2] #数据4:列表类型 bool = True #数据:5:布尔类型 dict = {'a':'abc','b':2} #数据6:字典类型 self.app_data.setValue('a', a) self.app_data.setValue('list', list) self.app_data.setValue('bool', bool) self.app_data.setValue('dict', dict)

我创建了个 save_info()  函数专门来进行QSettings 的数据存储。

代码说明:

QSettings的存储语句是 

self.app_data.setValue('a', a)

self.app_data 是QSettings对象名;setValue 是QSettings存储命令;'a' 是存储关键字,读取时根据他来读取的;a 是要存储的数据。

注意:我分别存储了,字符串、数值、列表、布尔、字典 5种类型的数据来测试QSettings是一什么格式类型来处理各种类型的数据。待会在初始化代码中会比较。

(3)从QSettings对象中读取数据

def init_info(self): time = self.app_data.value('time') self.text = self.app_data.value('self.text1') a = self.app_data.value('a') list = self.app_data.value('list') bool = self.app_data.value('bool') dict = self.app_data.value('dict') print(time) #输出数据的值 print(type(time)) #输出数据类型 print(self.text) print(type(self.text)) print(a) print(type(a)) print(list) print(type(list)) print(bool) print(type(bool)) print(dict) print(type(dict)) #初始化文本框的内容 self.textEdit.setPlainText(self.text)

我创建了init_info()函数来进行QSettings 数据读取。

代码说明:

a = self.app_data.value('a')

value 是QSettings读取命令;'a' 是要读取数据的关键字

(4)QSettings 存储数据的处理类型

这里探讨一下QSetting在写入,字符串,数值,列表,布尔,字典数据类型后,读取时是以什么类型读取的。创建QSettings对象的方式不同,其结果也不一样。

在方式1时:

在运行总程序后输入hello,world 后点击 保存数据 按钮,最后关闭程序。在再次启动程序是,输出数据和界面结果如下

周五 7月 3 15:52:53 2020 hello,world 1 ['1', 'a', '2'] true {'a': 'abc', 'b': 2}

由数据结果和上面存储时的类型相比可以看出,字符串,数值,列表,字典类型不变,而布尔类型变成了字符串类型。

在方式2时:

周五 7月 3 16:27:19 2020 hello,world,ini 1 ['1', 'a', '2'] true {'a': 'abc', 'b': 2}

由数据结果和上面存储时的类型相比可以看出,字符串,列表,字典类型不变,而数值,布尔类型变成了字符串类型。

 

(5)QSettings数据的删除

#删除QSettings数据 QSettings.clear(self.app_data)

3.测试总代码

3.1 testui.py(ui代码)

# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'testui.ui' # # Created by: PyQt5 UI code generator 5.15.0 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(362, 310) self.textEdit = QtWidgets.QTextEdit(Form) self.textEdit.setGeometry(QtCore.QRect(60, 60, 231, 81)) self.textEdit.setObjectName("textEdit") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(60, 190, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(210, 190, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.pushButton.setText(_translate("Form", "保存数据")) self.pushButton_2.setText(_translate("Form", "删除数据"))

3.2.test.py (调用操作文件)

import sys,os from PyQt5.QtWidgets import QApplication,QWidget from PyQt5 import QtCore from PyQt5.QtCore import QSettings, QDateTime from testui import Ui_Form #引用UI文件,根据调用类型选择继承窗口类型:QMainWindow,QWidget,QDialog class MyMainWindow(QWidget, Ui_Form):#Widget界面时>>(QWidget,UI_。。),MainWindow类似 def __init__(self, parent=None): super(MyMainWindow, self).__init__(parent) self.setupUi(self) #按钮信号连接 self.pushButton.clicked.connect(self.button) self.pushButton_2.clicked.connect(self.button_2) #创建Qsettings对象 #方式1 #self.app_data = QSettings('Mysoft', 'test') #方式2 self.app_data = QSettings('config.ini', QSettings.IniFormat) self.app_data.setIniCodec('UTF-8') # 设置ini文件编码为 UTF-8 #检查是否有数据进行初始化 if os.path.exists('./config.ini'): #方式2 #if self.app_data.value('time'): #方式1 #如果存在数据就进行初始化 self.init_info() else: #没有数据就认为是第一次打开软件,进行第一次QSettings 数据存储 self.save_info() def save_info(self): time = QDateTime.currentDateTime() #获取当前时间,并存储在self.qpp_data self.app_data.setValue('time', time.toString()) #数据0:time.toString()为字符串类型 self.text = self.textEdit.toPlainText()#获取当前文本框的内容 self.app_data.setValue('self.text1', self.text)#数据1:也是字符串类型 a = 1 #数据3:数值类型 list = [1,'a',2] #数据4:列表类型 bool = True #数据:5:布尔类型 dict = {'a':'abc','b':2} #数据6:字典类型 self.app_data.setValue('a', a) self.app_data.setValue('list', list) self.app_data.setValue('bool', bool) self.app_data.setValue('dict', dict) def init_info(self): time = self.app_data.value('time') self.text = self.app_data.value('self.text1') a = self.app_data.value('a') list = self.app_data.value('list') bool = self.app_data.value('bool') dict = self.app_data.value('dict') print(time) #输出数据的值 print(type(time)) #输出数据类型 print(self.text) print(type(self.text)) print(a) print(type(a)) print(list) print(type(list)) print(bool) print(type(bool)) print(dict) print(type(dict)) #初始化文本框的内容 self.textEdit.setPlainText(self.text) def button(self): #进行数据保存 self.save_info() def button_2(self): #删除QSettings数据 QSettings.clear(self.app_data) if __name__ == "__main__": #适配2k高分辨率屏幕 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) app = QApplication(sys.argv) myWin = MyMainWindow() myWin.show() sys.exit(app.exec_())

 

源代码下载链接:https://download.csdn.net/download/qq_38463737/12573570

 

 

 

 

 

 

 

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭