12. Leitura e Armazenamento de Configurações
Dica
Os trechos de código desta página precisam das seguintes importações se você estiver fora do console do pyqgis:
1from qgis.core import (
2 QgsProject,
3 QgsSettings,
4 QgsVectorLayer
5)
Muitas vezes é útil para o plugin salvar algumas variáveis para que o utilizador não necessite introduzir ou selecionar outra vez numa próxima vez que o plugin for acionado.
Estas variáveis podem ser salvas e recuperadas com a ajuda do Qt e QGIS API. Para cada variável, você deve pegar a chave que será usada para acessar a variável — para cor favorita do usuário use a chave “favourite_color” ou alguma outra palavra de interesse. É recomendado dar alguma estrutura para criação do nome das chaves.
Podemos diferenciar entre vários tipos de configurações:
configurações globais — estão vinculadas ao usuário em uma máquina específica. O próprio QGIS armazena muitas configurações globais, por exemplo, tamanho da janela principal ou tolerância de snap padrão. As configurações são tratadas usando a classe
QgsSettings
, por exemplo, através dos métodossetValue()
evalue()
.Aqui você pode ver um exemplo de como esses métodos são usados.
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)
O segundo parâmetro do método
value ()
é opcional e especifica o valor padrão retornado se não houver um valor anterior definido para o nome da configuração transmitida.Para um método para pré-configurar os valores padrão das configurações globais através do arquivo
global_settings.ini
, veja Implantando o QGIS em uma organização para mais detalhes.
configurações do projeto — variam entre projetos diferentes e, portanto, estão conectados a um arquivo de projeto. A cor de fundo da tela de mapa ou o sistema de referência de coordenadas de destino (SRC) são exemplos — fundo branco e WGS84 podem ser adequados para um projeto, enquanto fundo amarelo e projeção UTM são melhores para outro.
Um exemplo de uso a seguir.
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)
As you can see, the
writeEntry()
method is used for many data types (integer, string, list), but several methods exist for reading the setting value back, and the corresponding one has to be selected for each data type.
configurações da camada de mapa — essas configurações estão relacionadas a uma instância específica de uma camada de mapa com um projeto. Eles não estão conectados à fonte de dados subjacente de uma camada; portanto, se você criar duas instâncias da camada de mapa de um shapefile, elas não compartilharão as configurações. As configurações são armazenadas dentro do arquivo do projeto; portanto, se o usuário abrir o projeto novamente, as configurações relacionadas à camada estarão lá novamente. O valor para uma determinada configuração é recuperado usando o método
customProperty()
e pode ser definido usando o métodosetCustomProperty()
.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")