【转载】PyQt QSetting保存设置
转载地址: http://blog.sina.com.cn/s/blog_4b5039210100h3zb.html
用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位置,一些别的设置,还有一个经常用的,就是recent files,等等这些都可以通过Qsettings来实现。
我们知道,这些settings一般都是存在系统里的,比如windows一般都写在系统注册表或者写INI文件,mac系统一般都在XML文件里,那么按照一般的标准来说,许多应用程序是用INI文件来实现的。而Qsettings就是提供了一种方便的方法来存储和恢复应用程序的settings。
QSettings的API是基于Qvariant,Qvariant是一种数据类型的集合,它包含了大部分通常的Qt数据类型,比如QString,QRec,QImage,等等。
应用程序的任何地方想要声明一个Qsettings类型的变量,便不需要书写两个参数了,直接用settings = Qsettings即可。
那么如何用它来保持应用程序的settings信息呢?我们以字典数据类型与之类比,它也有key,以及对应的value。比如下面例子:
settings = Qsettings(“MySoft”,”QtPad”)
Mainwindow = QmainWindow()
settings.setValue(“pos”,QVariant(Mainwindow.pos())
settings.setValue(“size”,QVariant(Mainwindow.size())
上面两句就是把当前窗口的位置,和大小两个信息记录到了settings中,其中的key就是”pos”和”size”两个Qstring类型,而它所对应的值就是QVariant类型的。当然如果我们要写的key已在settings中存在的话,则会覆盖原来的值,写入新值。
如何读取Qsettings里的内容呢?如下:
Pos = settngs.value(“pos”).toPoint()
Size = settings.value(“size”).toSize()
当然如果key所对应的value是int型的,也可toInt(),如果没有我们要找的key,则会返回一个null QVariant 如果用toInt的话会得到0。
那么实际应用中我们一般会如下:
pos= settings.value("pos", QVariant(QPoint(200, 200))).toPoint()
size= settings.value("size", QVariant(QSize(400, 400))).toSize()
self.resize(size)
self.move(pos)
意思是,如果settings里有以前存下的(用setValue设置的)pos和size的值,则读取,如果没有,不会返回null,而会使用我们给它的起始值——default value——即应用程序第一次运行时的情况。
注意:因为QVariant是不会提供所有数据类型的转化的,比如有toInt(),toPoint(),toSize(),但是却没有对Qcolor,Qimage和Qpixmap等数据类型的转化,此时我们可以用QVariant.value(),具体参看QVariant模块说明。
下面看看如何在应用程序中使用:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self) self.readSettings() def readSettings(self):
settings = Qsettings(“MySoft”,”QtPad”)
pos=settings.value("pos",QVariant(QPoint(200,200))).toPoint()
size=settings.value("size",QVariant(QSize(400,400))).toSize()
self.resize(size)
self.move(pos)
def writeSettings(self):
settings = Qsettings(“MySoft”,”QtPad”)
settings.setValue("pos", QVariant(self.pos()))
settings.setValue("size", QVariant(self.size()))
def closeEvent(self,event):
if self.maybeSave():
self.writeSettings()
event.accept()
else:
event.ignore()
上面是一般应用程序的应用方法。
下面再看一些Qsettings里常用的method:
|
Qsettings.annKeys(self) 返回所有的key,以list的形式 Qsettings.applicationName(self) 返回应用程序名称 Qsettings.clear(self) 清楚此settings里的内容 Bool Qsettings.contains(self,key) 返回真,如果存在名为key的key Qsettings.remove(self, keyname) 清楚key及其所对应的value Qsetting.fileName() 返回写入注册表地址,或者INI文件路径 |
我们可以探索一下,这些settings在应用程序关闭以后到底存到了什么地方呢?
我们可以在上面的程序中的writeSettings中,后面加一句话:
Print Settings.fileName()
这个在windows下,默认Qsettings会打印出这个程序的系统注册表所在地:
这个结果是:\HKEY_CURRENT_USER\Software\MySoft\QtPad
如下图:

由此我们可以看出,这个writesettings其实就是个写注册表的过程。
当然,我们也可以不写注册表,我们写ini文件:
settings = QSettings("./QtPad.ini", QSettings.IniFormat)
settings.setValue("pos", QVariant(self.pos()))
settings.setValue("size", QVariant(self.size()))
就会在当前文件夹下产生一个QtPad.ini文件,打开后文件内容为:
[General]
pos=@Point(200 200)
size=@Size(400 400)
一个QSettings类
#!/usr/bin/python
#-*-coding:utf-8-*- from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.Qt import * class Util():
def __init__(self,parent = None):
pass def writeInit(self,path, user_key,user_value):
if(path.isEmpty() | user_key.isEmpty()):
return False
else:
#创建配置文件操作对象
self.config = QSettings(path, QSettings.IniFormat) #将信息写入配置文件
self.config.beginGroup("config")
self.config.setValue(user_key, user_value)
self.config.endGroup()
return True def readInit(self,path, user_key, user_value):
user_value = ""
if(path.isEmpty() | user_key.isEmpty()):
return False
else:
#创建配置文件操作对象
self.config = QSettings(path, QSettings.IniFormat) #读取用户配置信息
user_value = self.config.value(QString("config/") + user_key).toString()
return True
【转载】PyQt QSetting保存设置的更多相关文章
- 转载:pyqt线程间通过 信号/槽 通信
转自:http://blog.sina.com.cn/s/blog_613d5bb701016qzv.html 信号(singal)与槽(slot)用于对象相互通信,信号:当某个对象的某个事件发生时, ...
- 【转载】Pyqt QSplitter分割窗口
转载来自: http://blog.sina.com.cn/s/blog_4b5039210100h3ih.html 分割窗口在应用程序中经常用到,它可以灵活分布窗口布局,经常用于类似文件资源管理器的 ...
- [转载]使用PyQt来编写第一个Python GUI程序
转载自:http://python.jobbole.com/81276/ 英文版出处:http://pythonforengineers.com/your-first-gui-app-with-pyt ...
- 【转载】 Pyqt QStackedWidget堆栈窗体
转载地址: http://blog.csdn.net/a649518776/article/details/6636578 下面用代码实现上面窗口的设计 # -*- coding: utf-8 -*- ...
- 【转载】Pyqt 添加右键菜单方法
转载地址: http://www.cnblogs.com/yogalau/p/3954042.html?utm_source=tuicool QListWidget 是继承 QWidget 的, 所以 ...
- 【转载】pyqt QTableWidget的使用
转载地址: http://blog.sina.com.cn/s/blog_9b78c91101019sgi.html QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC.C#中 ...
- 【转载】Pyqt 编写的俄罗斯方块
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function from __future__ ...
- 【转载】 Pyqt 利用QDataStream对文件进行存取
# -*- coding: utf-8 -*- from PyQt4.QtGui import * from PyQt4.QtCore import * import sys QTextCodec.s ...
- 转载:pyqt的signal和solit
转自:http://blog.csdn.net/hlqyq/article/details/6713828 import sysfrom PyQt5.QtCore import pyqtSignal, ...
随机推荐
- linux下ftp的配置
最近公司要用到ftp,小菜鸡百度了一下教程,自己也总结一下 现在随便百度都是vsftpd的服务,所以这里我也是用vsftp 1.检测或安装vsftp 首先检查一下你的主机是否含有vsftp服务,关于r ...
- 大二在CSDN的博客整理
001我为什么想写博客 控制台版2048 version_1.0总结 022 囚徒困境中的均衡-----从一篇经典论文说起 021 模拟退火算法学习(一)-----求解最短连通路径 020 小记一次网 ...
- OverWatch团队文档格式规范
V1.0 最终修改于2016/10/19 概述 软件工程中,一份优雅的文档不仅能降低团队成员之间的沟通难度,而且能给之后的开发者提供一个非常有效的引导.本团队为了规范整个项目中文档的格式,便于统一管理 ...
- 多视图学习(multiview learning)
多视图学习(multi-view learning) 前期吹牛:今天这一章我们就是来吹牛的,刚开始老板在和我说什么叫多视图学习的时候,我的脑海中是这么理解的:我们在欣赏妹子福利照片的时候,不能只看45 ...
- Java框架Struts2
struts2的核心和工作原理 在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于we ...
- 调试使用windows堆程序遇到的问题
今天测试我的api hook demo,中间有个单向链表,我对他进行遍历的时候,通过判断链表当前元素是否为NULL(即0)来进行循环控制,在cmd下正常运行,输出的是:,struct addr is ...
- C#FTP操作类含下载上传删除获取目录文件及子目录列表等等
ftp登陆格式 : ftp://[帐号]:[密码]@[IP]:[端口] ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名 直接上代码吧,根据需要选择函数,可根据业务自己 ...
- ecshop 支付
支付分成两部分 1.订单信息 2.支付日志ID 3.生成支付代码 一次性支付完成 // 支付信息 include_once('includes/lib_payment.php'); $order['l ...
- solr多条件查询(四)
上面讲到比较烦琐,如果这个不好理解,可以直接用sorl的多条件过滤addFilterQuery();方法
- tyvj1463 智商问题
背景 各种数据结构帝~各种小姊妹帝~各种一遍AC帝~ 来吧! 描述 某个同学又有很多小姊妹了他喜欢聪明的小姊妹 所以经常用神奇的函数来估算小姊妹的智商他得出了自己所有小姊妹的智商小姊妹的智商都是非负整 ...