Estou apenas tentando entender a arquitetura de um QGIS Plugin criado com o QGIS Plugin Builder, bem como o fluxo de trabalho e a ligação entre os arquivos gerados. Se possível, eu prefiro um diagrama.
Também seria útil saber o que as seguintes funções fazem no código Python. Eu sou novo na criação de QGIS Plugin.
__init__( self, iface )
tr( self, message )
add_action( self )
initGui( self )
unload( self )
run( self )
qgis
python
qgis-plugins
pyqgis
Usuário123
fonte
fonte
iface
(a interface QGIS). Parece-me que se você sabe Python, os scripts são auto-explicativos (com todas as descrições #)Respostas:
O PyQGIS Cookbook explica quais arquivos são comuns nos plug-ins do QGIS. Como você pode ver lá, você precisaria apenas de três arquivos para executar um plugin mínimo:
__init__.py
metadata.txt
mainPlugin.py
O
__init__.py
arquivo informa ao QGIS que a pasta Plugin é um módulo Python. Ele deve conter umaclassFactory(iface)
função que o QGIS usa para inicializar seu plug-in, usando sua classe principal de Plugin, que está nomainPlugin.py
arquivo.metadata.txt
é onde você especifica os metadados do seu plug-in, como nome, autor, licença, versão, página inicial, bugtracker, repositório, entre outros.mainPlugin.py
pode ser nomeado de outras maneiras. Este é o arquivo mencionado__init__.py
e contém as funções que você enumerou na sua pergunta. Eu diria que este arquivo é o núcleo do seu plugin.Em relação ao QGIS Plugin Builder, sugiro que você leia a documentação oficial para ter uma idéia de como está estruturada. Na verdade, prefiro não usar esse plug-in, porque ele cria muitas coisas que você não gostaria de saber enquanto aprende o básico do desenvolvimento de plug-ins.
Eu recomendo que você comece com plugins que você entende completamente. Ou seja, comece com uma estrutura de plug-in muito básica (até mínima) e adicione complexidade somente quando necessário e quando você dominar o básico.
Por outro lado, eu vou lhe dizer para que servem as funções que você enumerou:
__init__( self, iface )
Este é o construtor do seu plugin. Quando o QGIS reconhece uma pasta como um plug-in Python, o
__init__()
método é executado e o objeto de interfaceiface
é passado ao seu plug-in, para que ele possa acessar o QGIS posteriormente.Você deve usar este método para salvar uma referência
iface
(como será o seu ponto de entrada para os componentes do QGIS), bem como para inicializar outras variáveis que serão usadas em outras funções do seu plugin.tr( self, message )
Esta é uma função Python para obter traduções de strings. É claro que você precisará fornecer traduções, mas o faz em outros arquivos Qt (ou seja, nos arquivos .ts).
Em geral, você não precisaria dessa função, a menos que suporte idiomas diferentes do inglês. Definitivamente, não é uma prioridade para novos desenvolvedores do PyQGIS.
add_action( self )
Essa é uma função que eu só vi nos plugins gerados pelo QGIS Plugin Builder. Ajuda você a configurar a GUI do seu plugin. Eu pessoalmente não o uso nos meus plugins.
initGui( self )
Este é um método para configurar a GUI do seu plug-in no QGIS. Aqui você especifica se deseja um botão na barra de ferramentas do QGIS Plugin, uma barra de ferramentas personalizada, um botão dentro de um menu existente do QGIS e / ou (não recomendado) um novo menu personalizado.
Este também é um bom lugar para estabelecer conexões SIGNAL / SLOT entre os botões do plug-in (ou outros controles) e suas funções.
unload( self )
Este é um método para remover os widgets de plug-in (botões, menus e similares) da QGIS GUI.
Este também é um bom lugar para desconectar SINAIS e SLOTS aos quais você se conectou
initGui( self )
.run( self )
Este é o principal método do seu plugin. Aqui você coloca o código que será executado quando o usuário clicar no botão do seu plug-in. Em geral, você começa obtendo alguns dados do projeto QGIS atual e, em seguida, realiza algumas edições, processamentos ou relatórios. Depende totalmente de você.
Se o seu plugin tiver uma caixa de diálogo, este é o método em que você deve abri-lo, para que o usuário possa começar a interagir com a caixa de diálogo. A lógica do diálogo é normalmente tratada em outros arquivos Python, para distribuir seu código e favorecer a manutenção e o encapsulamento.
Observe que
run()
não é um bom lugar para definir conexões SIGNAL / SLOT, pois isso será definido toda vez que você abrir a caixa de diálogo do seu plugin, acionando suas funções (SLOT) várias vezes, como no comportamento Estranho de um plugin QGIS: minha função é acionado duas vezes .Finalmente, a melhor maneira de aprender a programar plugins QGIS é ler o código fonte de outros plugins. Comece com os mais simples e, quando dominá-los, vá para os mais complexos.
Eu criei um plug - in de demonstração (muito simples) para ajudá-lo a entender como os plug-ins do QGIS funcionam. Você pode acessá-lo aqui . Existem instruções de instalação no arquivo LEIA-ME. O plug-in permite que você saiba, através de caixas de mensagem, quando cada função solicitada é executada.
fonte
run()
é uma espécie de convenção. Geralmente,initGui()
você define uma conexão entre um clique no botão do plug-in e o seurun()
método; portanto, se você quiser atribuir outro nome a ele, também deve atualizar o slot usado nessa conexão. Algo comoself.action.triggered.connect(self.myCustomRun)
.