We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Entwicklung von Plug-Ins für QGIS 3 - Eine Einführung

00:00

Formal Metadata

Title
Entwicklung von Plug-Ins für QGIS 3 - Eine Einführung
Title of Series
Number of Parts
95
Author
License
CC Attribution 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Dieser Vortrag widmet sich der Entwicklung von QGIS 3 Plug-Ins und ist vor allem an Entwickler/innen oder Hobbyprogrammierer/innen gerichtet, die bereits QGIS 2 Plug-Ins programmiert haben. Die Entwicklung für eine Software, die noch in Entwicklung ist bzw. noch nicht etabliert ist, bringt einige Hürden mit sich und führt zu vielen Fragen. Dieser Vortrag geht speziell auf Änderungen ein, die beim Umstieg von QGIS 2 auf QGIS 3 relevant werden.
Keywords
12
58
60
71
Thumbnail
22:07
72
77
Thumbnail
20:22
Open sourcePlug-in (computing)Lecture/Conference
Plug-in (computing)Version <Informatik>Software repositoryMoment (mathematics)JSONXMLUMLLecture/Conference
DatabasePlug-in (computing)WebsiteService (economics)GeodesicSoftwareDatabasePlug-in (computing)GoogleXMLUMLComputer animation
Plug-in (computing)PolygonComputer animationXMLProgram flowchart
Plug-in (computing)Object (grammar)SoftwareGebiet <Mathematik>Vector graphicsComputer fontService (economics)
SoftwarePlug-in (computing)XML
CodeVersion <Informatik>UpdatePlug-in (computing)EckeLecture/Conference
Plug-in (computing)Social classHTTP cookieComponent-based software engineeringListe <Informatik>C++Version <Informatik>XMLComputer animation
MetreVersion <Informatik>CubeZahlXML
Plug-in (computing)CodeComputer fileMetadataUser profileSet (mathematics)XMLComputer animation
MetadataVersion <Informatik>Lecture/ConferenceComputer animation
EditorVersion <Informatik>Greatest elementPlug-in (computing)Computer animation
Version <Informatik>Coordinate systemPlug-in (computing)MetadataComputer animationLecture/Conference
SignalFunktionalitätPlug-in (computing)CodeZifferSource codeXML
SignalGoogleFunktionalitätPlug-in (computing)Generating functionSource codeXML
Print <4->SignalPlug-in (computing)UpdateError messageStatement (computer science)XML
SignalModule (mathematics)Social classError messageLattice (order)QuoteXMLComputer animation
ICONPrint <4->Plug-in (computing)Computer animation
APIVersion <Informatik>Social classFunktionalitätQubitModule (mathematics)Mathematical analysisFunktionalitätSocial classFunction (mathematics)Version <Informatik>CodePlug-in (computing)Query languageGeometryWindows RegistryLevel (video gaming)Computer animationXML
APIModule (mathematics)Social classXML
APIGUI widgetXMLComputer animationProgram flowchart
APIZugriffXMLComputer animationProgram flowchart
APIGUI widgetSlide ruleXMLComputer animation
APIVariable (mathematics)Well-formed formulaAttribute grammarLink (knot theory)EditorXMLProgram flowchartComputer animation
APIGUI widgetProgram flowchartXMLComputer animation
9 (number)Statement (computer science)Computer animation
Division (mathematics)Division (mathematics)DataflowComputer animation
APISignalPlug-in (computing)Module (mathematics)XMLComputer animation
Plug-in (computing)Plug-in (computing)Default (computer science)Web pagePlatteVideo game consoleXMLComputer animation
Print <4->HTTP cookieScripting languageObject (grammar)Slide ruleAdaptive behaviorHigh availabilityPlug-in (computing)CodeLecture/ConferenceComputer animation
Plug-in (computing)Computer fileFirefox <Programm>Presentations <Programm>DownloadComputer animation
Computer fileTask (computing)Firefox <Programm>Demo (music)PDF <Dateiformat>PostgreSQLPresentations <Programm>Server (computing)DownloadPDF <Dateiformat>Mach's principleComputer animationLecture/Conference
Firefox <Programm>Server (computing)Presentations <Programm>Computer fileTask (computing)PostgreSQLMono-FrameworkModule (mathematics)Plug-in (computing)Computer animationXML
Lecture/Conference
Transcript: German(auto-generated)
Herzlich willkommen zum zweiten Vortrag im Themenblock Freie Software. Ich denke mal, die meisten, die hier sind, die haben sich QGIS 3 schon heruntergeladen, sich das angeschaut und dann relativ schnell mitbekommen. Na sowas, meine geliebten Plugins, mit denen ich jeden Tag arbeite,
die gibt es für QGIS 3 noch gar nicht. Warum das so ist und wie man das Problem beheben kann, das erklärt uns jetzt Peter Gipper. Ja, vielen Dank. Ich gebe heute eine kleine Einführung in die Entwicklung von Plugins für QGIS 3.
Und es ist keine Einführung in Pluginentwicklung allgemein. Das würde den Rahmen sprengen. Deswegen, also ich gehe vor allem darauf ein, was sind die Unterschiede und zeige Ihnen die wesentlichen Sachen, auf die es zu achten gilt, wenn Sie Ihr QGIS 2 Plugin updaten möchten für die aktuelle Version.
Genau, also wer schon ein QGIS 2 Plugin vielleicht privat benutzt oder wer es im öffentlichen Repository hat, hat auch schon eine E-Bail bekommen. Anfang des Jahres war das mit der Bitte, das Plugin abzudaten für QGIS 3 eben, damit es beim Release schon möglichst viele gibt. Es gibt auch schon einige im Moment, aber genau, viel fehlt eben noch
und das kommt jetzt dann so nach und nach. Ja, ganz kurz zu mir. Mein Name ist Peter Gipper. Ich arbeite bei Geosys in Berlin als Gizentwickler und wir bieten verschiedene Dienstleistungen um QGIS herum an.
Seit noch nicht ganz so lange. Auf der Website QGIS.pro kann man das alles finden. Ja, kurz zur Motivation. Wir entwickeln eben auch Plugins für QGIS und haben dann letztes Jahr im Herbst einen Auftrag bekommen vom HLNOG, das Hessische Landesamt für Naturschutz, Umwelt und Geologie.
Und ja, die brauchten eine Software. Eine Erfassungssoftware hatte auch schon einen Namen, HLBK Erfassung. Heißt Hessische Lebensraum- und Biotopkartierung. Und es gab auch schon relativ konkrete Vorstellungen,
wie das Ganze aussehen sollte, nämlich QGIS Plugin in Kombination mit einer Specialized Datenbank im Hintergrund. Denn es sollen zum einen Geodaten erfasst werden, deswegen reicht keine normale Erfassungssoftware und eben auch Sachdaten. Die Sachdaten-Erfassung folgt einer sehr speziellen Systematik.
Es gibt also eine relativ komplexe Datenbank, die im Hintergrund liegt. Hier mal kurz gezeigt, ein Ausschnitt davon. Da kann man also nicht den Nutzer zumuten, da direkt reinzuschreiben, sondern der muss geführt werden und dafür bietet das Plugin dann eben verschiedene Eingabemasken. In dem Fall zum Beispiel, so was öffnet sich dann,
wenn ich einen Polygon digitalisiert habe, bekomme ich eine Eingabemaske und werde so da durchgeführt. Eine zweite Sache, die ich dazu gerne noch zeigen würde, was das Plugin auch macht. Es werden ja Aufträge vergeben an Kartierer, die bestimmte Objekte in einem bestimmten Gebiet kartieren sollen.
Die Ergebnisse werden dann über die Software eingegeben und das Plugin kann auch dann eben für ein bestimmtes Kartiergebiet, wie hier zum Beispiel mit der gelben Outline, von verschiedenen Diensten Datengrundlagen herunterladen, also sowohl Vektordaten als auch Rasterdaten. Das hat zum einen den Vorteil, dass man offline arbeiten kann,
ja also zum Beispiel im Gelände, und zum anderen hat man dadurch auch dann eine bessere Performance. So, das war der Anlass. Jetzt sollte das Ganze für Kugis 3 schon entwickelt werden. Das hatte ich letztes Jahr im Herbst schon mal irgendwie gehört
und auf den Schirm gehabt, dass das kommt, aber noch nicht weit darüber nachgedacht. Und dann war erst mal die Frage, was macht man jetzt überhaupt? Ein Plugin für eine Software zu entwickeln, die noch gar nicht released ist, bringt natürlich ein paar Schwierigkeiten mit sich. Man hatte Gott sei Dank diese Version 2.99, also eine Entwicklerversion, die wöchentlich released wurde,
also es gab wöchentliche Updates. Das hatte nur den Nachteil, dass es dann eben auch sein kann, dass man dann mal den Code komplett wieder updaten muss, auch weil sich dann die API eben teilweise wöchentlich ändert. Das hat sich Gott sei Dank in Grenzen gehalten jetzt,
aber das kommt dann eben schon mal vor. Dann beim Projektmanagement zu beachten, dass sich das Release Datum, das wissen wahrscheinlich auch die meisten, immer mehrmals verschiebt. Also es sollte ursprünglich, glaube ich, letzten Herbst kommen, hat sich dann immer wieder verschoben und ist jetzt aber endgültig dann vor etwa einem Monat released worden.
Kurz allgemein, was brauche ich überhaupt, um Kugis Plugins zu entwickeln? Also man benutzt verschiedene Bibliotheken, zum einen natürlich die Kugis API und hat dann aber diese Qt-Bibliothek noch,
die stellt vor allem Klassen bereit für die Erstellung von grafischen Oberflächen. Also da kriege ich meine Fenster her, meine Buttons, Listen etc. Diese Qt-Bibliothek ist aber leider in C++ geschrieben, deswegen brauchen wir noch ein drittes Element
und das ist PyQt, ein sogenanntes Binding, sodass wir diese Qt-Klassen eben in Python zur Verfügung haben. Die gute Nachricht, das bleibt so. Also man muss sich da vom Workflow her nicht umstellen. Das sind genau diese Komponenten, die weiterhin benutzt werden.
Allerdings gibt es Major Version Changes bei allen dreien. Das heißt, bei der Versionsnummer ändert sich die Zahl vor dem Punkt und das wiederum bedeutet, dass es einen API Break gibt, also Code, der für die frühere Version geschrieben wurde, ist in der aktuellen Version, es ist nicht gewährleistet, dass der noch ausführbar ist.
Genau, und das bei allen drei Bibliotheken eben. Ja, wie funktionieren Kugis Plugins, ganz kurz mal gezeigt. Es gibt ja, von Kugis wird ein Ordner angelegt. So war es. In Kugis 2 hier habe ich das mal gezeigt. Im Home-Verzeichnis, bei mir unter Peter, Kugis 2,
Kugis Plugins und dort liegen dann verschiedene Ordner mit allen Plugins, die ich runtergeladen habe oder erstellt habe. Und hier habe ich jetzt mal eins reingelegt. Der Ordner heißt MyPlugin. Und das stammt aus dem PyKugis Developer Cookbook. Das ist also ein simples Beispiel für ein Plugin.
Und habe das Ganze dann noch mal runtergekocht auf alles, was nur unbedingt nötig ist. Und bin dann bei zwei bzw. drei Dateien im Endeffekt gelandet, die wir jetzt hier in dem Ordner sehen. Da haben wir zum einen eine metadata.txt. Da stehen eben die Metadaten drin.
Und eine initpy mit dem Python-Code. Und jetzt haben wir hier noch eine Datei .pyc. Das sind die kompilierten Dateien. Die werden automatisch erstellt, wenn der Code einmal ausgeführt wird. Und das kann man normalerweise ignorieren. Zum Vergleich hier, wie das Ganze jetzt in Kugis 3 aussieht.
Erstmal stellen wir fest, der Ordnerfahrt ist wesentlich länger geworden. Wir sind immer noch im Home-Verzeichnis. Aber der Kugis-Ordner liegt jetzt unter AppData Roaming. Zumindest auf dem Windows-System hier. Und genau dann gibt es jetzt auch in Kugis 3 eine Neuerung. Ja, Benutzerprofile. Das heißt, ich gehe dann in die Ordner Profiles.
Und dann habe ich hier in einem Default-Profil wieder die Ordner Python-Plugins. Und dann diesen Ordner MyPlugin mit eben dem minimalen Plugin. Und hier sind auch die Dateien metadata.txt und initpy.
Und die kompilierten Dateien, das ist eine Neuerung von Python 3, werden alle in einen Ordner geschoben. Also normalerweise ist es ja so, dass man in diesem Plugin-Ordner viele Python-Dateien hat. Und man hätte dann, wenn man das einmal ausführt, diese ganzen Dateien, würde sich die Menge sozusagen verdoppeln. Und die werden jetzt aber alle in diesen Ordner PyCache gelegt.
Sodass man die ein bisschen übersichtlicher zusammen hat. Ja, wir gucken mal rein in die metadata. Was hat sich da geändert? Das ist die von der 2er-Version. Und ich zeige direkt mal daneben Version 3.
Es gibt nur einen Character, der sich hier geändert hat. Das ist eine kleine Änderung, aber eigentlich die allerwichtigste. Nämlich bei Kugis Minimum Version muss sich hier natürlich jetzt eine 3 reinschreiben. Sonst findet Kugis dieses Plugin nicht. Beziehungsweise es wird nicht angezeigt im Plugin Manager.
Genau, und das ist nur mal kurz gezeigt, was eben rauskommt aus diesen Metadaten. Daraus wird dann diese Ansicht erzeugt im Erweiterungsmanager mit der Beschreibung etc. zu dem Plugin. So, das hier ist die init.py.
Ja, es ist ein Plugin, das auf eine Seite passt hier. Wie gesagt, es sind nur die Dinge drin, die unbedingt nötig sind. Wir haben in den ersten zwei Zeilen Import Statements. Klar, je nachdem, was wir im Code nachher benutzen wollen. Und dann diese Funktion ClassFactory, die wird von Kugis verlangt. Und instantiiert unsere Hauptklasse.
Die sehen wir da drunter, heißt hier Test Plugin. Und die hat drei Methoden, bzw. vier Methoden. Drei davon sind unbedingt notwendig. Die vierte, die ganz unten steht, die run heißt, ist nicht unbedingt notwendig. Aber meistens möchte man ja, dass das Plugin auch irgendetwas tut. Und da steckt eben jetzt hier die Funktionalität drin.
Wenn wir da mal reinschauen, das ist nur ein Printbefehl, der da jetzt drin steht. Vielleicht ganz kurz, diese zwei da drüber, die init GUI-Methode und die unload. Die werden ausgeführt, wenn man im Erweiterungsmanager das Plugin aktiviert, bzw. deaktiviert. Erzeugen sozusagen die Schaltflächen, verknüpfen die mit den Funktionalitäten.
Und genau, die unload wird eben die Schaltflächen wieder aus der Kugisoberfläche entfernen. So, wenn ich das jetzt nehme, wie es ist, und in den Kugis3 Ordner schiebe, und das dann ausführen möchte, dann kriege ich ein paar Fehler.
Als allererstes, Syntaxerror, missing parenthesis in call to print. Haben wahrscheinlich die meisten schon mal gehört, die sich ein bisschen mit Python beschäftigen. In Python 3 musste ich Klammern setzen, bei einem Printbefehl. Kommen wir später noch mal kurz darauf zu sprechen, warum das so ist. Das ist wahrscheinlich das, was am häufigsten sowieso kommen wird beim Update von Plugins.
Und ist aber ja keine Schwierigkeit. Dann als nächstes gibt es ein paar Errors bei den Import Statements. Als erstes wird ein Modul nicht gefunden, PyQt4, habe ich vorhin gesagt.
Jetzt wird ja PyQt5 benutzt, ist also auch klar. Wir müssen überall die 4 durch die 5 ersetzen. Das kann man sozusagen vorher schon mal generell einfach machen. Und guckt sich dann an, was als nächstes für Fehler kommen. Geht dann eben immer so weiter. Hier in dem Fall wäre der nächste Error ein Import Error. Cannot import name QAction.
Er findet also in dem entsprechenden Modul diese Klasse nicht. Liegt daran, dass die Klasse sich verschoben hat. Die ist von dem Modul QtGui in QtWidgets gelandet. Und das ist was, was viele Klassen betrifft. Ja, diese QtGui. Das Modul wurde aufgesplittet.
Und da ist eben vieles speziell auch in das Modul QtWidgets gewandert. Der dritte Fehler, der hier steht, Cannot import name Signal. Da kann ich suchen, wie ich will. Das werde ich nicht mehr finden in keinem Modul. Das wurde nicht verschoben, sondern entfernt. Da muss ich also einen anderen Weg finden, das Gleiche dann zu erreichen, was ich vorher damit gemacht habe.
Das gucken wir uns hier kurz an. Das gibt diese eine Zeile, wo ich meine Schallfläche mit einer Funktion verbinde. Und in der oberen Zeile, das ist die alte Variante. Die ist nicht mehr gültig.
Genau, die Neuerung steht hier drunter. Ich sage jetzt Action, Triggered, Connect und dann die Funktion. Das ging vorher auch schon. Die Neuerung ist eigentlich nur, dass diese alte Variante eben nicht mehr akzeptiert wird. Genau, und damit bin ich eigentlich schon fertig.
Ich habe hier eigentlich nur in vier Zeilen Änderungen vorgenommen. Und das Plugin würde also so jetzt dann laufen. Also ich kann sie auch nur ermuntern, das mal ruhig auszuprobieren. Der Code, so wie er hier steht, müsste dann eben in QGIS 3 ausführbar sein. Ein paar generelle Dinge zur QGIS API bzw. PyQGIS.
Habe ich vorhin kurz gesagt, die Python-Version ist natürlich jetzt eine andere. Wir arbeiten nicht mehr mit Python 2.7, sondern mit Python 3. Ich glaube, die aktuelle QGIS-Version hat 3.6 drin. Und entsprechend ändern sich auch Libraries, die wir eventuell benutzt haben in Python.
Da muss man dann eben sich entsprechend auch auseinandersetzen. Und vorhin auch schon erwähnt, es ändern sich die QT bzw. PyQT-Versionen. Bei den Modulen gibt es keine dramatischen Veränderungen. Eins ist verschwunden, hier dieses Network Analysis. Das gibt es noch nicht mehr. Die Funktionen sind noch da, stecken jetzt alle in dem Analysis-Modul drin.
Das war es eigentlich an Änderungen von Modulen. Allerdings wurde zwischen den Modulen sehr viel verschoben. Hier unten sehen wir zum Beispiel, dass das Core-Modul jetzt wesentlich umfangreicher ist. Ja, Klassen wurden umbenannt, verschoben, teilweise entfernt.
Ich zeige ein paar prominente Beispiele, zum Beispiel diese Klasse QGIS Map Player Registry. Kann ich mir vorstellen, dass das in den meisten Plugins Probleme machen wird. Die gibt es nämlich nicht mehr. Die war dafür da, dass ich Layer zu meinem Projekt hinzufügen und entfernen kann. Ja, ich verwalte damit meine Layer.
Hier kann ich aber behaupte ich in den meisten Fällen auch ein Find Replace machen. Also suchen und ersetzen. Und einfach Map Player Registry mit QGIS Project dann ersetzen. Die Klasse QGIS wurde umbenannt. Wie heißt jetzt QGIS? Mit einer anderen Schreibweise. Genau, das ist so ein Muster, was wir generell beobachten.
Sehen wir auch gleich noch auf der nächsten Folie. Was insgesamt so ein bisschen mehr Konsistenz führt. Ein weiteres Beispiel, eigentlich eine Methode der Klasse QGIS Feature. Da konnte ich vorher fragen, ob die eine Geometrie hat überhaupt. Ja, hier so eine If-Abfrage mal.
Und wenn das nicht der Fall war, dann bekomme ich none zurück. Jetzt ist es so, dass ich immer eine Geometrie zurück bekomme. Wenn das Feature keiner hat, dann kriege ich eine leere Geometrie. Das heißt, ich müsste jetzt hier eine neuere Methode benutzen. Has Geometry oder mir die Geometrie ausgeben lassen. Und die dann prüfen, ob da was drin ist oder nicht. Also das ist jetzt kein besonders prominenter Fall.
Aber irgendwie exemplarisch für die Änderung. Also es kann eben sein, dass teilweise sich Funktionalitäten geändert haben. Der Code läuft zwar durch, aber es passiert ein bisschen was anderes im Hintergrund. Genau, also hier zu Methoden, veränderte Funktionalitäten. Teilweise wurden Methoden entfernt, teilweise unbenannt.
Und das hatte ich vorhin angesprochen, hier die Akronyme in Methodennamen. Jetzt nur noch Großschreibung des ersten Buchstabens. Das sind nur ein paar Beispiele, die ich hier aufgelistet habe. Das betrifft auch WMS, WFS etc. Und eine Ausnahme ist XY am Ende. Aber das ist auch kein Akronym, deswegen trifft das hier so zu.
Eine Seite, auf die ich hinweisen möchte, ist API Break. Da hat man eine ganz gute Übersicht, was geändert wurde. Zum Beispiel hier sehe ich Renamed Classes. Und da kann ich eine ganze Weile scrollen. Es wurden Hunderte Klassen unbenannt. Und da bietet diese Seite eine ganz gute Übersicht, wenn man da also einen Einstieg finden möchte.
Es gibt ein paar neue Widgets. Da gehen wir mal kurz durch. Zum einen eine Checkable Combo Box. Combo Box gab es vorher auch. Das kennen wahrscheinlich die meisten.
Einfach so ein Dropdown-Menü. Jetzt habe ich eben die Option, dass ich da Checkboxen drin habe. Ich kann die einzeln anhaken und bekomme dann eine Kommaseparierte Liste angezeigt. Dann gibt es diesen QGIS-Font-Button. Das ist was Neues. Oben rechts im Bild. Da kann ich die Schriftart auswählen. Ich habe zwei Möglichkeiten.
Wenn ich auf dieses Dreieck klicke, dann bekomme ich so eine übersichtliche Option. Und wenn ich auf das Textfeld gehe, habe ich eben dieses Fenster Textformat. Das sollte bekannt sein aus QGIS. Und da habe ich jetzt Zugriff drauf. Es gibt dieses QGIS Opacity-Widget. Das ist neu. Haben vielleicht auch schon manche gesehen.
Das kann ich mir zum Beispiel auch im Layer-Tree für verschiedene Layer einschalten. Und kann jetzt direkt in der Legende sozusagen die Transparenz einstellen. Muss nicht jedes Mal in die Layereigenschaften gehen. Das Widget steht den Entwicklern auch zur Verfügung. Ist eigentlich nichts anderes als ein Slider. Den kann ich mit dem Layer verknüpfen. Und dann stellt er eben automatisch die Transparenz ein.
Ja, eigentlich auch relativ trivial. Es gibt jetzt einen neuen Line-Edit. Password-Line-Edit. Da kann ich optional die Zeichen ein- oder ausblenden. QGIS Property-Override-Button. Gab es so ähnlich vorher auch schon.
Habe ich noch nie gebraucht. Deswegen kann ich da gar nicht so viel zu sagen. Man bekommt hier einen Link zu diesem Ausdrucks-Editor. Kann diese Schallfläche mit einem Layer verknüpfen. Und hat dann zum Beispiel bei Felder und Werte eben genau die Attribute des Layers zur Verfügung. Um damit Ausdrücke zu erstellen. Hier noch die Rasterband-Commo-Box. Auch nur ein Dropdown-Menü.
Ich verknüpfe es mit einem Layer. Und habe dann die Rasterkanäle automatisch da drin. Und hier das letzte Widget. Der Symbol-Button. Ähnlich wie dieser Font-Button. Hier habe ich verschiedene Methoden eben ein Symbol zu erstellen. Jetzt habe ich eigentlich noch ein paar Anmerkungen zu Python.
Ja, das sind nicht mehr viele Folien. Ich gehe da noch ganz kurz durch. Also zu den Keywords wollte ich was sagen. Das habe ich vorhin kurz gesagt. Der Print-Befehl braucht jetzt Klammern. Liegt daran, dass er kein Keyword mehr ist. Ja, also ich habe die mal ausgegeben für Python 2 und Python 3. Genau, es ist jetzt eine Build-in-Function.
Und muss deswegen auch wie eine Funktion aufgerufen werden. Das gleiche betrifft den Exec-Befehl. Plugin-Entwickler kennen den wahrscheinlich auch aus PyQt. Der hieß dort bis heute Exec mit Unterstrich. Weil es eben als Keyword belegt war. Es ist jetzt kein Keyword mehr. Deswegen kann ich auch diesen Exec-Befehl direkt verwenden.
Ansonsten eine Neuerung. False und True sind jetzt eben Keywords. Die kann ich nicht neu belegen. Man kann so nicht mehr solche Späße machen, wie false gleich True zu setzen oder so. Weil es eben jetzt feste Keywords sind. Gut, dann das vielleicht noch kurz.
Division, relativ wichtig. Integer-Division funktioniert anders. 1 durch 1 ist jetzt 1,0. Ich habe hier so ein paar Beispiele gezeigt. Genau, ich bekomme immer Flow draus, wenn ich 2 Integer dividiere. Wenn ich die alte Variante benutzen möchte, dann muss ich 2 Slashes benutzen. Und das Modulo ist nach wie vor das gleiche.
Gut, dann bringe ich über ein paar Folien mal drüber. Genau, ganz kurz noch Qt, PyQt, passt auf eine Folie bei mir. Liegt auch daran, dass das eigentlich gar nicht so neu ist. Also ich glaube Qt 5 gibt es seit 2012.
Also schon eine ganze Weile ist eigentlich nichts Neues für Qt jetzt schon. Da wurden auch die Module ein bisschen reorganisiert. Es gibt ein paar Neue. Und das Wichtigste für uns eigentlich, diese Signal- und Slotgeschichten, die ich am Anfang erwähnt hatte, müssen jetzt eben anders formuliert werden.
Genau, hier noch ganz kurz nützliche Plugins für Plugin-Entwicklung. Erstens natürlich die Python-Konsole. Dann der Plugin-Reloader. Plugin-Bilder. Und dieses First Aid-Plugin. Das hilft einem dabei, also Python-Fehler abzufangen. Ja, wenn das nicht ausreicht, wie das QGIS per Default funktioniert,
könnte sich diese Plugin mal angucken. Sind also alle sehr nützlich bei der Entwicklung. Und hier noch ein paar Webseiten. Hauptsächlich eben die entsprechenden APIs. Da möchte ich nur auf eine hinweisen eigentlich. Und zwar die bei PyQGIS. Da gibt es jetzt eben eine richtige Doku für, bzw. die ist im Entstehen.
Es ist noch nicht alles da. Es ist häufig so, dass man zurückverlinkt wird auf die C++-Dokumentation. Aber genau, das ist also ganz interessante Neuerungen.
Ja, dann bedanke ich mich für die Aufmerksamkeit. Ja, und wenn Sie Fragen haben, stehe ich natürlich zur Verfügung. Vielen Dank. Spannendes Thema. Und es gibt sofort Fragen. Wir fangen hier vorne an.
Keine Frage, sondern eine Bemerkung. Ich habe mal für QGIS II einen Plugin-Programmierkurs gemacht. Und habe mich da nie dran gewagt. Nach Ihrem Vortrag reizt mich das eigentlich für QGIS III. Danke. Ich habe eine kurze Frage.
Nun ist ja QT ein relativ großes Projekt und auch nicht QGIS-spezifisch. Gibt es denn da von QT nicht Tools, um den praktisch von QT IV zu QT V so mal was drüberlaufen zu lassen, um schon so ein paar Ersetzungen automatisch durchzuführen? Dass es das für die QGIS-QT-Objekte nicht unbedingt gibt, verstehe ich.
Weil das einfach ein deutlich kleinerer Kreis ist. Aber von QT hätte ich das vielleicht erwartet. Bin ich ehrlich gesagt gar nicht ganz sicher, ob es das gibt. Also es gibt schon verschiedene automatisierte Skripte, um jetzt Code zu updaten. Habe ich mich aber nie mit auseinandergesetzt,
weil es eben, wie Sie sagten, im Fall von QGIS schon ein bisschen speziell ist. Und man da wahrscheinlich länger braucht, sich da reinzuarbeiten, das zu benutzen, je nach Komplexität des Plugins natürlich, als die Anpassungen selbst vorzunehmen.
Eine Frage, dass ich noch zu? Nur ganz kurz, können Sie einen Slide zurückgehen zu dieser Links? Die Folien sind auch online verfügbar. Ich glaube, bei der Foskes Seite sowieso. Ansonsten zeige ich noch mal kurz unsere Seite von Geosys. Das ist geosysnet.de. Und da gibt es die Sparte über uns.
Und da findet man Downloads. Ich zeige das kurz. Genau, und hier unter Downloads kann man die Folien runterladen als PDF. Alles klar, vielen Dank. Wir haben gelernt.
Ist es eine ganz wichtige Frage? Du hast gerade die Ligenliste da drauf. Machst du die Ligenliste noch mal auf? Der erste Link, da ist die Wiki-Seite von der QGIS-Seite.
Da ist zum Beispiel ein Modul beschrieben 223, wo zum Beispiel diese PyQt-Umbesetzung schon gemacht wird. Vielen Dank. Also wir haben gelernt, QGIS 2 Plugins umzukoden. Nach QGIS 3 ist gar nicht so schwierig. Es muss einfach gemacht werden.
Vielen Dank, Peter Gibber.