Qual é o objetivo de algumas funções e arquivos nos plugins QGIS Python?


8

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.

  1. __init__( self, iface )
  2. tr( self, message )
  3. add_action( self )
  4. initGui( self )
  5. unload( self )
  6. run( self )

algumas informações no seguinte link: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/… . Infelizmente, acho que não há um 'Guia dos manequins' no desenvolvimento de plug-ins do QGIS (como eu certamente faria com um!).
Joseph

lamento dizer que o URL acima não foi encontrado no servidor.
precisa saber é o seguinte

É uma questão Python pura de criação de classes (geral e com PyQt4 ). A única pergunta do PyQGIS aqui é o que é iface(a interface QGIS). Parece-me que se você sabe Python, os scripts são auto-explicativos (com todas as descrições #)
gene

Estou apenas imaginando como cada uma das funções refletirá o qgis. Digamos, por exemplo, que as alterações no código da função de execução sejam refletidas em nosso plugin.
precisa saber é o seguinte

Estranho, o URL estava funcionando antes ... tente o seguinte: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/…
Joseph

Respostas:


16

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__.pyarquivo informa ao QGIS que a pasta Plugin é um módulo Python. Ele deve conter uma classFactory(iface)função que o QGIS usa para inicializar seu plug-in, usando sua classe principal de Plugin, que está no mainPlugin.pyarquivo.

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.pypode ser nomeado de outras maneiras. Este é o arquivo mencionado __init__.pye 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:

  1. __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 interface ifaceé 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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 ).

  6. 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.


1
Obrigado gcarrillo por sua explicação clara. Tenho certeza de que será extremamente útil para mim como iniciante.
User123

1
Pergunta sobre o método run . Eu também vi o nome onRun . Posso presumir que a nomeação não importa, mas geralmente contém a palavra ficar sem hábito?
BritishSteel

2
Certo @BritishSteel, você pode nomear o método que quiser. 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 seu run()método; portanto, se você quiser atribuir outro nome a ele, também deve atualizar o slot usado nessa conexão. Algo como self.action.triggered.connect(self.myCustomRun).
Germán Carrillo

1
Isso é ótimo, também vou achar isso incrivelmente útil!
Joseph

@ gcarrillo: no terceiro ponto, você mencionou "Esta é a função, vista em plugins gerados via construtor de plugins". Estou curioso para saber quais são as outras maneiras de desenvolver plugins que não sejam o construtor de plugins.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.