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.
__init__( self, iface )
tr( self, message )
add_action( self )
initGui( self )
unload( self )
run( self )
qgis
python
qgis-plugins
pyqgis
User123
quelle
quelle
iface
(die QGIS-Schnittstelle). Es scheint mir, dass, wenn Sie Python kennen, die Skripte selbsterklärend sind (mit allen # Beschreibungen)Antworten:
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__.py
Datei teilt QGIS mit, dass der Plugin-Ordner ein Python-Modul ist. Es muss eineclassFactory(iface)
Funktion enthalten , mit der QGIS Ihr Plugin initialisiert und dabei Ihre Haupt-Plugin-Klasse verwendet, die sich in dermainPlugin.py
Datei 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.py
könnte auf andere Weise benannt werden. Dies ist die Datei, auf die verwiesen wird,__init__.py
und 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:
__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 Schnittstellenobjektiface
an 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.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.
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.
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.
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 )
.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.
quelle
run()
ist eine Art Konvention. Normalerweise stelleninitGui()
Sie eine Verbindung zwischen einem Klick auf Ihre Plugin-Schaltfläche und Ihrerrun()
Methode her. Wenn Sie ihr also einen anderen Namen geben möchten, sollten Sie auch den in dieser Verbindung verwendeten Steckplatz aktualisieren. So etwas wieself.action.triggered.connect(self.myCustomRun)
.