Menu
  • Hem
  • Dokument
  • Om Mig
Geosupportsystem

Gör färdigt koden till QGIS plugin

Posted on 2017-09-28

Då skall vi försöka avsluta koden för det plugin som skapats i de tre tidigare inläggen.
Nu blir det mer av samma, men även mycket nytt. Det skulle visa sig att det även blev en hel del problem som måste lösas i denna kod, men det slipper förhoppningsvis du som följer med och kodar själv (peppar peppar).
Det blev som sagt lite huvudbry innan det fungerade som jag ville, och jag har inte riktigt förstått precis allt när det gäller koden, men det fungerar, och det är det viktiga.
För det första behöver QgsMapLayerRegistry importeras tillsammans med QgsMapLayer sedan tidigare.
Skärmbild från 2017-09-17 18-55-05
Den här gången så var det riktigt mycket som strulade, men det berodde framför allt på problem med teckenkodning. Å, ä, ö ville inte fungera samtidigt som text och heltal kunde konverteras, och blandas med utf8… Jag tror att jag hittade en lösning till slut och för detta så behöver ännu ett bibliotek laddas in och läsas om:
Skärmbild från 2017-09-17 20-40-23
Jag börjar också bli rejält ”seg i kolan” efter många timmar framför datorn.

Läs in attribut från valt lager

Vi börjar med att skapa funktionen för att hämta attribut från valt lager. Här fick jag justera lite jämfört med tidigare kod, men det är inget som kommer påverka din tidigare kod, så länge du anger funktionen exakt som min text i bilden nedan.
Skärmbild från 2017-09-17 18-56-06.png
Ja, och med exakt så menar jag inte mina klippta kommentarer i högerkanten. Det jag tagit bort är vector_layer som argument. Jag fick inte till det på ett bra sätt att skicka med detta, men det löser jag i stället genom att inleda funktionen med att tilldela variabeln vector_layer färdet från combo_layer.
Sedan är det en bortkommenterad rad som jag använt när jag felsökt, så den kan du hoppa över.
Mycket påminner sedan om den förra funktionen. Rensa comboboxen, hämta valt lager som ett objekt baserat på lagernamnet. Skapa en lista med alla attributfält i detta lager. Till skillnad från förra funktionen så lägger jag här till hela listan med värden på en gång.
För att funktionen skall köras så behöver den ”kopplas” till combo_layer. Detta görs med ännu en rad, som jag placerar i run funktionen.
Skärmbild från 2017-09-17 19-03-58
Nu bör koden gå att prova (make deploy) i QGIS.
Som kommentaren i bilden ovan antyder så kan jag nu koppla andra element från dialogen till funktioner på liknande sätt.

Skapa listan

Först och främst, för att hantera teckenkodtabeller så sätter jag standardkodning till UTF-8. Sedan lägger jag till en koppling till combo_attribute som kör funktionen create_text_list() varje gång denna ändras.
Skärmbild från 2017-09-17 20-45-08
Sedan återstår bara funktionen  create_text_list().
Skärmbild från 2017-09-17 20-52-14.png
Lite snabbt så. Valt vektorlager hämtas (igen) och valt attributnamn används för att ta reda på vilket ”index” detta fältet har. Därefter används en smart funktion för att leta reda på alla unika värden i den kolumn som har detta index. Beroende på om checkbox rutan är ikryssad eller ej så skapas olika textsträngar som skall separera de olika värdena. ”\n” är helt enkelt en textkod för ”ny rad”. Vilken sedan används tillsammans med listan med unika värden för att skapa en textvariabel, som sedan skrivs till textfältet i dialogrutan… pust.

Kör MyPlugin

När jag nu kör mitt plugin, så har den redan valt ett lager, men det hjälper inte. Jag måste välja aktivt själv för att koden skall starta, och jag måste välja något annat än vad som är förvalt. Men det går att välja ”tillbaka” sedan om man vill det.
Skärmbild från 2017-09-17 21-00-12
Detta ändrar i attributväljaren, vilket automatiskt kör den koden, men det går att välja ett annat attribut än det första i listan själv i stället.
Skärmbild från 2017-09-17 21-01-07
Nu går det att fixa dessa små egenheter, och det går även att lägga in en funktion som skriver om resultatet när man väljer att kryssa i rutan. Som det är nu så får man välja ett annat attribut och ”välja tillbaka” efter det att man markerat rutan för att resultatet skall komma i en kommaseparerad lista.

Avslutning

Är koden perfekt? Naturligtvis inte. Jag har hållit på länge för att komma i mål med dessa inlägg för att det skall bli ett avslut som är ok, så jag är absolut inte nöjd med allt. Det är dock ett ganska enkelt, men ändå inte för enkelt exempel på vad man kan göra med python och QGIS för att skapa egna plugin.
I morgon så avslutar jag serien den här veckan med att titta på hur man går vidare när man väl är klar med sitt plugin.

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Translate with Google

GBR In English
GER Auf Deutch
FRA En Français
ESP En Español
Swedish is a hard language for a machine to translate. Nuance and detail will likely be lost.
     

Bok om QGIS på Svenska

Bok

Beställ Boken/E-bok genom att klicka på bilden (även förhandsgranskning).

Senaste kommentarer

  • klakar om Laga hål i höjddata
  • Per Ekström om Laga hål i höjddata
  • Sur om Mera verktyg i QGIS
  • Anton om ”Mobile *.Geodatabase”
  • Fredrik Ekberg om Ingen är oskyldig

Arkiv

Prenumerera på Geosupportsystem

Skriv in namn och epost för att prenumerera på meddelanden från denna blogg.
Loading

geosupport

TrueNAS bygge. @fractaldesignna Define R5 är rikt TrueNAS bygge. @fractaldesignna Define R5 är riktigt trevlig att bygga i, och den sväljer väldigt mycket disk. Här skall virtualiseras både PostGis, WebODM och Geonode så småningom.
Då har jag lite att bläddra i ett tag framöver. Då har jag lite att bläddra i ett tag framöver.
YouTube video to frames. Processed in OpenDroneMap YouTube video to frames. Processed in OpenDroneMap and visualized in QGIS 3.17.
Ladda mer...

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
©2021 Geosupportsystem | WordPress Theme by Superbthemes.com