Was ist der Zweck einiger Funktionen und Dateien in QGIS Python-Plugins?

8

Ich versuche nur, die Architektur eines mit dem QGIS Plugin Builder erstellten QGIS-Plugins sowie den Workflow und die Verknüpfung zwischen generierten Dateien zu verstehen. Wenn möglich, würde ich ein Diagramm bevorzugen.

Es wäre auch hilfreich zu wissen, was die folgenden Funktionen im Python-Code tun. Ich bin neu in der Erstellung von QGIS-Plugins.

  1. __init__( self, iface )
  2. tr( self, message )
  3. add_action( self )
  4. initGui( self )
  5. unload( self )
  6. run( self )
User123
quelle
Es gibt einige Informationen in dem folgenden Link: docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/... . Leider glaube ich nicht, dass es einen "Dummies Guide" für die Entwicklung von QGIS-Plugins gibt (wie ich es mit einem sicher tun könnte!).
Joseph
Es tut mir leid zu sagen, dass die obige URL nicht auf dem Server gefunden wurde.
User123
Es ist eine reine Python-Frage der Erstellung von Klassen (allgemein und mit PyQt4 ). Die einzige PyQGIS-Frage hier ist, was ist iface(die QGIS-Schnittstelle). Es scheint mir, dass, wenn Sie Python kennen, die Skripte selbsterklärend sind (mit allen # Beschreibungen)
Gen
Ich frage mich nur, wie die einzelnen Funktionen die QGIS widerspiegeln. Nehmen wir zum Beispiel an, Änderungen am Funktionscode werden in unserem Plugin angezeigt.
User123
Seltsam, die URL funktionierte schon vorher ... versuchen Sie Folgendes
Joseph

Antworten:

16

Das PyQGIS-Kochbuch erklärt, welche Dateien in QGIS-Plugins häufig vorkommen. Wie Sie dort sehen können, benötigen Sie nur drei Dateien, um ein minimales Plugin auszuführen:

  • __init__.py
  • metadata.txt
  • mainPlugin.py

Die __init__.pyDatei teilt QGIS mit, dass der Plugin-Ordner ein Python-Modul ist. Es muss eine classFactory(iface)Funktion enthalten , mit der QGIS Ihr Plugin initialisiert und dabei Ihre Haupt-Plugin-Klasse verwendet, die sich in der mainPlugin.pyDatei befindet.

metadata.txt Hier geben Sie die Metadaten Ihres Plugins an, z. B. den Namen des Plugins, den Autor, die Lizenz, die Version, die Homepage, den Bugtracker und das Repository.

mainPlugin.pykönnte auf andere Weise benannt werden. Dies ist die Datei, auf die verwiesen wird, __init__.pyund enthält die Funktionen, die Sie in Ihrer Frage aufgezählt haben. Ich würde sagen, diese Datei ist der Kern Ihres Plugins.


In Bezug auf den QGIS Plugin Builder empfehle ich Ihnen, die offizielle Dokumentation zu lesen , um eine Vorstellung davon zu bekommen, wie er aufgebaut ist. Ich bevorzuge es eigentlich, ein solches Plugin nicht zu verwenden, da es viele Dinge erzeugt, die Sie nicht wissen möchten, während Sie die Grundlagen der Plugin-Entwicklung lernen.

Ich empfehle Ihnen, von Plugins auszugehen, die Sie vollständig verstehen. Beginnen Sie also mit einer sehr einfachen (sogar minimalen) Plugin-Struktur und fügen Sie Komplexität nur dann hinzu, wenn dies erforderlich ist und wenn Sie die Grundlagen beherrschen.

Auf der anderen Seite werde ich Ihnen sagen, für welche Funktionen Sie aufgezählt haben:

  1. __init__( self, iface )

    Dies ist der Konstruktor Ihres Plugins. Wenn QGIS einen Ordner als Python-Plugin erkennt, wird die __init__()Methode ausgeführt und das Schnittstellenobjekt ifacean Ihr Plugin übergeben, damit es anschließend auf QGIS zugreifen kann.

    Sie sollten diese Methode verwenden, um einen Verweis auf iface(da dies Ihr Einstiegspunkt für QGIS-Komponenten ist) zu speichern und andere Variablen zu initialisieren, die Sie in anderen Funktionen Ihres Plugins verwenden werden.

  2. tr( self, message )

    Dies ist eine Python-Funktion zum Abrufen von Übersetzungen von Zeichenfolgen. Natürlich müssen Sie Übersetzungen bereitstellen, aber Sie tun dies in anderen Qt-Dateien (nämlich in .ts-Dateien).

    Im Allgemeinen benötigen Sie diese Funktion nur, wenn Sie andere Sprachen als Englisch unterstützen. Für neue PyQGIS-Entwickler hat dies definitiv keine Priorität.

  3. add_action( self )

    Dies ist eine Funktion, die ich nur in Plugins gesehen habe, die über QGIS Plugin Builder generiert wurden. Es hilft Ihnen beim Einrichten Ihrer Plugin-GUI. Ich persönlich benutze es nicht in meinen Plugins.

  4. initGui( self )

    Dies ist eine Methode zum Einrichten der GUI Ihres Plugins in QGIS. Hier legen Sie fest, ob Sie eine Schaltfläche in der Symbolleiste des QGIS-Plugins, eine benutzerdefinierte Symbolleiste, eine Schaltfläche in einem vorhandenen QGIS-Menü und / oder (nicht empfohlen) ein neues benutzerdefiniertes Menü wünschen.

    Dies ist auch ein guter Ort, um SIGNAL / SLOT-Verbindungen zwischen Ihren Plugin-Tasten (oder anderen Steuerelementen) und Ihren Funktionen herzustellen.

  5. unload( self )

    Dies ist eine Methode zum Entfernen Ihrer Plugin-Widgets (Schaltflächen, Menüs usw.) aus der QGIS-GUI.

    Dies ist auch ein guter Ort, um die angeschlossenen SIGNALE und SLOTS zu trennen initGui( self ).

  6. run( self )

    Dies ist die Hauptmethode Ihres Plugins. Hier geben Sie den Code ein, der ausgeführt wird, wenn der Benutzer auf die Schaltfläche Ihres Plugins klickt. Im Großen und Ganzen rufen Sie zunächst einige Daten aus dem aktuellen QGIS-Projekt ab und bearbeiten, verarbeiten oder berichten dann. Es liegt ganz bei Ihnen.

    Wenn Ihr Plugin über ein Dialogfeld verfügt, sollten Sie es auf diese Weise öffnen, damit der Benutzer mit dem Dialogfeld interagieren kann. Die Dialoglogik wird normalerweise in anderen Python-Dateien behandelt, um Ihren Code zu verteilen und die Wartung und Kapselung zu fördern.

    Beachten Sie, dass dies run()kein guter Ort ist, um SIGNAL / SLOT-Verbindungen festzulegen, da diese jedes Mal festgelegt werden, wenn Sie den Dialog Ihres Plugins öffnen und Ihre (SLOT) -Funktionen mehrmals auslösen, wie bei einem ungeraden Verhalten in einem QGIS-Plugin: Meine Funktion ist zweimal ausgelöst .


Der beste Weg, um das Programmieren von QGIS-Plugins zu lernen, ist das Lesen des Quellcodes anderer Plugins. Beginnen Sie mit einfachen und wenn Sie sie beherrschen, fahren Sie mit komplexeren fort.

Ich habe ein (sehr einfaches) Demo-Plugin erstellt , damit Sie verstehen, wie QGIS-Plugins funktionieren. Sie können von hier aus darauf zugreifen . Die README-Datei enthält Installationsanweisungen. Das Plugin informiert Sie über Meldungsfelder darüber, wann jede von Ihnen angeforderte Funktion ausgeführt wird.

Germán Carrillo
quelle
1
Vielen Dank, Gcarrillo, für Ihre klare Erklärung. Ich bin sicher, dass es mir als Anfänger außerordentlich hilfreich sein wird.
User123
1
Frage zur Ausführungsmethode . Ich habe es auch onRun genannt gesehen . Kann ich davon ausgehen, dass die Benennung keine Rolle spielt, aber im Allgemeinen das Wort aus Gewohnheit enthält?
BritishSteel
2
Richtig @BritishSteel, Sie können die gewünschte Methode benennen. run()ist eine Art Konvention. Normalerweise stellen initGui()Sie eine Verbindung zwischen einem Klick auf Ihre Plugin-Schaltfläche und Ihrer run()Methode her. Wenn Sie ihr also einen anderen Namen geben möchten, sollten Sie auch den in dieser Verbindung verwendeten Steckplatz aktualisieren. So etwas wie self.action.triggered.connect(self.myCustomRun).
Germán Carrillo
1
Das ist einfach toll, ich werde das auch unglaublich nützlich finden!
Joseph
@gcarrillo: Im dritten Punkt hatten Sie erwähnt "Dies ist die Funktion, die in Plugins zu sehen ist, die über den Plugin Builder generiert wurden". Ich bin nur neugierig, welche anderen Möglichkeiten es gibt, andere Plugins als den Plugin Builder zu entwickeln.
User123