前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt5 QSetting

PyQt5 QSetting

作者头像
用户6021899
发布2019-08-14 17:37:01
2K0
发布2019-08-14 17:37:01
举报

用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位置,一些别的设置,还有一个经常用的,就是recent files,等等这些都可以通过Qsettings来实现。

这些 settings一般都是存在系统里的,比如 windows一般都写在系统注册表或者写 INI文件,mac系统一般都在 XML文件里。而 Qsettings就是提供了一种方便的方法来存储和恢复应用程序的settings。

QSetting 来自PyQt5.QtCore模块,使用之前需导入该模块。当我们创建一个 Qsettings的对象时,我们需要传递给它两个参数,第一个是你公司或者组织的名称,第二个事你的应用程序的名称。比如:

Qsettings(“MS”,”MyApp”)

假如我们在应用程序中多次要用到Qsettings,为了简单起见,我们可以在主程序中先如下声明:

app.setOrganizationName("My organization") app.setOrganizationDomain("http://www.My-domain.cn") app.setApplicationName("myApp")

然后在应用程序的任何地方想要声明一个Qsettings类型的变量,便不需要书写两个参数了,直接用下面的语句就可以了:

settings = Qsettings()

保存设置用 settings.setValue(设置名 ,变量)即可。一般在通过在主窗口的closeEvent方法中保存 最终的setting。

settings = QSettings() settings.setValue("recentFiles",self.recentFiles) settings.setValue("MainWindowGeometry", self.saveGeometry())#保存主窗口尺寸和位置 #也可以self.size().self.pos()分别 返回尺寸和位置 以分开保存

#保存状态,如工具条的位置,停靠窗口的的位置和大小等 settings.setValue("MainWindowState", self.saveState())

恢复设置用 变量=settings.value(设置名)即可,一般写在初始化方法中。比如:

settings = QSettings() self.recentFiles = settings.value("recentFiles") or [] geometry = settings.value("MainWindowGeometry") if not ( geometry is None):#如果设置非空

self.restoreGeometry(geometry)#恢复主窗口尺寸和位置 state = settings.value("MainWindowState") if not (state is None): self.restoreState(state)#恢复状态,如工具条的位置,停靠窗口的的位置和大小等。

下面介绍recent file 列表的更新:

当用户保存文件时,就可以把当前文件名插入到最近文件列表的开头;一旦该列表长度超过上限,就删除最后一个文件:

if self.fileName not in self.recentFiles: self.recentFiles.insert(0,self.fileName) if len(self.recentFiles) > self.maxNumRecentFiles: self.recentFiles.pop()

有了最近文件列表,就可以动态的显示文件菜单。

首先,创建一系列文件相关动作和退出动作:

self.fileMenuActions = [self.fileNewAction,self.fileOpenAction,self.fileSaveAction,self.fileSaveAsAction] self.exitAction = self.createAction("E&xit",icon="",checkable=False, slot=self.close,tip="退出",shortcut=QKeySequence.Close)

接着,在创建文件菜单时只创建一个空的菜单,不添加任何动作,并将该菜单的aboutToShow 信号连接到 用于动态显示各文件相关动作的槽。aboutToShow信号在菜单被点击(或者用快捷键调用)时发射。在此之前,文件菜单里面的内容并不存在。

#文件菜单 self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu.aboutToShow.connect(self.updateFileMenu)#动态显示菜单

然后,定义这个用于动态显示显示各文件相关动作的槽:

def updateFileMenu(self): self.fileMenu.clear() self.fileMenu.addActions(self.fileMenuActions) current = self.fileName recentFiles = [] for fname in self.recentFiles: if fname != current and QFile.exists(fname): recentFiles.append(fname) if recentFiles: self.fileMenu.addSeparator() for i ,fname in enumerate(recentFiles): action =self.createAction(fname,icon=None,checkable=False, slot=self.loadRecentFile,tip="recent file",shortcut=None) action.setData(fname)#保存数据到动作 self.fileMenu.addAction(action) self.fileMenu.addSeparator() self.fileMenu.addAction(self.exitAction)

最后,定义各最近文件动作的槽:

def loadRecentFile(self): sender = self.sender() if isinstance(sender,QAction): fname =sender.data()#取出动作保存的数据 if self.okToSaveChange(): self.load(fname)#加载文件

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档