QGIS - Ändern Sie die Projektvariable über ein Dropdown-Menü

Oct 01 2020

Dies ist mein erstes Mal, dass ich versuche, eine Automatisierung in der QGIS-Umgebung zu entwickeln.

Ich versuche, eine benutzerdefinierte Projektvariable - DMA-Auswahl - programmgesteuert zu ändern.

Die geänderte Projektvariable wird dann verwendet, um den Parameter in regelbasierten Symbologien für 2 Ebenen unter Verwendung der einzelnen Variablen zu ändern.

Ich habe ein Skript geschrieben, das die Projektvariable auf der Python-Konsole ändern kann, wenn ich die Variable manuell im Skript ändere.

project = QgsProject.instance()
QgsExpressionContextUtils.setProjectVariable(project,'DMA_Select','NORTHMEAD')
iface.mapCanvas().refreshAllLayers()

Ich habe auch ein Formular in QT Designer mit einer Dropdown-Liste der möglichen Werte für die Projektvariable erstellt.

Was mache ich als nächstes, um dies miteinander zu kombinieren, damit das aus dem Kombinationsfeld ausgewählte Tal die Projektvariable ändern kann?

Ich habe im Internet und in Reiseführern / Büchern nach dieser speziellen Lösung gesucht und mir nichts ausgedacht. Ich kann sehen, dass wir das Formular / die Benutzeroberfläche an Ebenen binden können, aber kein Beispiel finden, in dem ein Projekt oder eine globale Variable geändert wird.


Ich habe in die Datei change_variable.py eingefügt - zwischen def initGui (self): und def unload (self):

    def VariableValue(self):
        self.setVariableValue(value)):
        project = QgsProject.instance()
        QgsExpressionContextUtils.setProjectVariable(project,'DMA_Select', value)

        #iface is accessed by self.iface inside the plugin
        self.iface.mapCanvas().refreshAllLayers()

und dann im def run (self): abschnitt danach

#comboBox is the UI objectName
self.dlg.comboBox.currentTextChanged.connect(lambda currentText: setVariableValue(currentText))

Wenn ich QGIS öffne, erhalte ich die Fehlermeldung

beim Laden des Plugins


change_variable.py geändert

Das Plugin wird in Ordnung geladen, aber wenn Ausführen und Dropdown ausgewählt ist, wird dieser Fehler angezeigt

Antworten

2 LeonPowałka Oct 02 2020 at 11:10

Ich würde dieses Problem lösen, indem ich mein eigenes QGIS-Plugin mit PluginBuilder erstelle . Es ist nicht kompliziert und es gibt viele Anleitungen, wie das geht. Sie benötigen ein Plugin, damit auf die wichtigsten Komponenten der QGIS-App zugegriffen werden kann.

Suchen Sie nach dem Erstellen des Plugins die .ui-Datei im Hauptverzeichnis des Plugins und fügen Sie die UI-Komponenten so hinzu, wie Sie sie zuvor in Qt Designer erstellt haben.

Nun im Haupt-Plugin-Code ( PluginName.py ):

Definieren Sie eine setVariableValue-Funktion irgendwo in der Plugin-Klasse. Die Funktion muss Zugriff auf die wichtigsten QGIS-Anwendungskomponenten haben.

def setVariableValue(self, value):
    project = QgsProject.instance()
    QgsExpressionContextUtils.setProjectVariable(project,'DMA_Select', value)
    #iface is accessed by self.iface inside the plugin
    self.iface.mapCanvas().refreshAllLayers()

Verbinden Sie schließlich die Funktion mit dem Steckplatz comboBox currentTextChanged in der Methode run (self) in der Haupt-Plugin-Klasse. Der Variablenwert wird jedes Mal geändert, wenn Sie einen neuen Wert aus der Liste auswählen.

#comboBox is the UI objectName
self.dlg.comboBox.currentTextChanged.connect(lambda currentText: self.setVariableValue(currentText))

Dann müssen Sie das Plugin neu laden.