ich bin ziemlicher Anfänger mit Python und habe von QT leider noch keine Ahnung. Dennoch schreibe ich gerade für das Programm QGis ein eigenes kleines Python-Plugin. QGis nutzt Python 3 und QT. Dabei stoße ich immer wieder auf Probleme, die ich entweder selbst lösen kann oder gelegentlich Hilfe auf stackexchange bekomme. Leider klappt das nicht immer und aktuell stehe ich vor einem Problem wo ich auch mit einem Post auf Stackexchange nicht weiter komme. Eventuell gibt es hier jemanden, der mir helfen kann. Würde gerne mit meinem Plugin weiter kommen.
Mein aktuelles Problem ist folgendes.
Ich rufe über einen Button eine Funktion auf. Dabei wird eine QT-Gui geöffnet, der User kann Werte eingeben und die Maske schließen. Nach dem Schließen wird in QGis ein Maptool gesetzt, dass die Koordinaten eines Mausklicks auf der Karte ausgibt. Nach dem Klick wird das Maptool zurückgesetzt und ich möchte mit den Koordinaten weiter arbeiten. Mein Problem dabei ist, dass das Maptool als Funktion aufgerufen wird und Hauptfunktion einfach weiter läuft, obwohl der Nutzer noch keine Eingabe gemacht hat. Es gibt seitens des Maptools ein QT void Signal, dass ausgelöst wird. Ich verstehe allerdings nicht, wie ich dieses Signal nutze.
Vielleicht kann mir jemand von euch erklären, wie ich damit umgehe.
Die Dokumentation zu dem Maptool
https://www.qgis.org/api/classQgsMapTool.html
Void-Signal, dass vermutlich meinen Zweck erfüllt
https://www.qgis.org/api/classQgsMapToo ... af14459599
Anbei noch Ausschnitte meines Codes.
Code: Alles auswählen
def run2(self):
# öffnet die entsprechende GUI
self.dlg2.show()
result = self.dlg2.exec_()
# Wenn GUI bestätigt, weiter machen
if result:
# QGSMapToolEmitPoint ist das Maptool
self.pointTool = QgsMapToolEmitPoint(self.canvas)
self.pointTool.canvasClicked.connect(self.display_point)
self.canvas.setMapTool(self.pointTool)
# Auf das Beenden dieses Aufrufes würde ich gerne Warten.
self.display_point(self.pointTool)
# Hier kommt dann der restliche Code der Funktion
# DoSomething mit self.point
# Funktion zum Erhalt der Koordinaten
def display_point(self, pointTool):
try:
self.point = QgsGeometry.fromPointXY(QgsPointXY(pointTool.x(), pointTool.y()))
print(self.point)
# Reset des MapTools
self.canvas.unsetMapTool( self.pointTool )
# Jetzt erst weiter in run2
except AttributeError:
pass