12. 读取和存储设置
提示
如果您在pyqgis控制台之外,则此页面上的代码片段需要以下导入:
1from qgis.core import (
2 QgsProject,
3 QgsSettings,
4 QgsVectorLayer
5)
很多时候,插件保存一些变量是有用的,这样用户就不必在下次运行插件时再次输入或选择它们。
这些变量可以通过Qt和QGISAPI进行保存和检索。对于每个变量,您应该选择一个将用于访问该变量的键-对于用户最喜欢的颜色,您可以使用键“Favorest_COLOR”或任何其他有意义的字符串。建议为键的命名提供一些结构。
我们可以区分几种类型的设置:
global settings -它们绑定到特定机器上的用户。QGIS本身存储了大量的全局设置,例如,主窗口大小或默认捕捉容差。设置是使用
QgsSettings
类,例如通过setValue()
和value()
方法:研究方法。在这里,您可以看到如何使用这些方法的示例。
1def store(): 2 s = QgsSettings() 3 s.setValue("myplugin/mytext", "hello world") 4 s.setValue("myplugin/myint", 10) 5 s.setValue("myplugin/myreal", 3.14) 6 7def read(): 8 s = QgsSettings() 9 mytext = s.value("myplugin/mytext", "default text") 10 myint = s.value("myplugin/myint", 123) 11 myreal = s.value("myplugin/myreal", 2.71) 12 nonexistent = s.value("myplugin/nonexistent", None) 13 print(mytext) 14 print(myint) 15 print(myreal) 16 print(nonexistent)
的第二个参数
value()
方法是可选的,并指定如果没有为传递的设置名称设置先前的值,则返回的默认值。方法来预配置全局设置的默认值。
global_settings.ini
文件,请参见 在组织内部署QGIS 了解更多细节。
project settings -在不同的项目之间有所不同,因此它们与一个项目文件相连。地图画布背景颜色或目的地坐标系(CRS)就是例子-白色背景和WGS84可能适合一个项目,而黄色背景和UTM投影可能更适合另一个项目。
下面是一个用法示例。
1proj = QgsProject.instance() 2 3# store values 4proj.writeEntry("myplugin", "mytext", "hello world") 5proj.writeEntry("myplugin", "myint", 10) 6proj.writeEntryDouble("myplugin", "mydouble", 0.01) 7proj.writeEntryBool("myplugin", "mybool", True) 8 9# read values (returns a tuple with the value, and a status boolean 10# which communicates whether the value retrieved could be converted to 11# its type, in these cases a string, an integer, a double and a boolean 12# respectively) 13 14mytext, type_conversion_ok = proj.readEntry("myplugin", 15 "mytext", 16 "default text") 17myint, type_conversion_ok = proj.readNumEntry("myplugin", 18 "myint", 19 123) 20mydouble, type_conversion_ok = proj.readDoubleEntry("myplugin", 21 "mydouble", 22 123) 23mybool, type_conversion_ok = proj.readBoolEntry("myplugin", 24 "mybool", 25 123)
如您所见,
writeEntry()
方法用于许多数据类型(整型、字符串、列表),但有几种方法可以回读设置值,并且必须为每种数据类型选择相应的方法。
map layer settings -这些设置与具有项目的地图图层的特定实例相关。他们是 not 连接到一个层的底层数据源,所以如果您创建一个shapefile的两个地图层实例,它们将不会共享设置。这些设置存储在项目文件中,因此,如果用户再次打开项目,与层相关的设置将再次存在。属性检索给定设置的值。
customProperty()
方法,并且可以使用setCustomProperty()
一。1vlayer = QgsVectorLayer() 2# save a value 3vlayer.setCustomProperty("mytext", "hello world") 4 5# read the value again (returning "default text" if not found) 6mytext = vlayer.customProperty("mytext", "default text")