Os trechos de código desta página precisam das seguintes importações se você estiver fora do console do pyqgis:
1 2 3 4 5 | from qgis.core import (
QgsProject,
QgsSettings,
QgsVectorLayer
)
|
12. Leitura e Armazenamento de Configurações¶
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 com significado. É 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def store(): s = QgsSettings() s.setValue("myplugin/mytext", "hello world") s.setValue("myplugin/myint", 10) s.setValue("myplugin/myreal", 3.14) def read(): s = QgsSettings() mytext = s.value("myplugin/mytext", "default text") myint = s.value("myplugin/myint", 123) myreal = s.value("myplugin/myreal", 2.71) nonexistent = s.value("myplugin/nonexistent", None) print(mytext) print(myint) print(myreal) 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 Deploying QGIS within an organization 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
proj = QgsProject.instance() # store values proj.writeEntry("myplugin", "mytext", "hello world") proj.writeEntry("myplugin", "myint", 10) proj.writeEntry("myplugin", "mydouble", 0.01) proj.writeEntry("myplugin", "mybool", True) # read values (returns a tuple with the value, and a status boolean # which communicates whether the value retrieved could be converted to # its type, in these cases a string, an integer, a double and a boolean # respectively) mytext, type_conversion_ok = proj.readEntry("myplugin", "mytext", "default text") myint, type_conversion_ok = proj.readNumEntry("myplugin", "myint", 123) mydouble, type_conversion_ok = proj.readDoubleEntry("myplugin", "mydouble", 123) mybool, type_conversion_ok = proj.readBoolEntry("myplugin", "mybool", 123)
Como você pode ver, o método
writeEntry()
é usado para todos os tipos de dados, mas existem vários métodos para ler o valor de configuração novamente, e o correspondente deve ser selecionado para cada tipo de dados.
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()
.1 2 3 4 5 6
vlayer = QgsVectorLayer() # save a value vlayer.setCustomProperty("mytext", "hello world") # read the value again (returning "default text" if not found) mytext = vlayer.customProperty("mytext", "default text")