Hallo Bernhard und Stefan,

vielen Dank für die Unterstützung!

Das hilft mir schon mal wieder um weiter ins Python unter QGIS einzusteigen. Das mit dem Slot-Signal-Konzept muss noch mal durchfringen. Das hört sich aber sehr spannend an.

Ich hatte noch eine Mail von Thoma Baumann bekommen, auf deren Grundlage ich mein Problem lösen konnte. Mit dem Qtimer. Das hatte der Thomas leider nicht über die Liste geschickt, daher zitiere ich die Mail hier:

------------------------
Hallo Claas,
mal off-list ne kurze Antwort, denn die Antwort von Bernhard Ströbl klingt ja vielversprechend. Ergänzend hab ich mal kurz noch was zusammengewürfelt aus dem Autosaver Plugin von QGIS (arbeitet mit QTimer) .
Hier ist das Plugin zum Testen:
https://github.com/thbaumann/claas_temp/blob/main/__init__.py bzw. https://github.com/thbaumann/claas_temp/

Ein Intervall von 1 Sekunde fände ich schon sehr kurz und auch beim Gedanken, dass ein anderes Programm die dbf bearbeitet "stellen sich mir die Nackenhaare hoch" :-) aber so wie ich dich einschätze als Poweruser wirst du ja wissen, was du machst. Weil man ja nicht auf den Layer selber gehen kann, sondern schauen muss, ob sich was an der Datei geändert hat kommt man wahrscheinlich um einen force reload nicht drumherum, was mit 1 sek Intervall auch krass wäre---
alles im Plugin eingebaut.
Also wie gesagt ein erster Wurf/Entwurf das Plugin und kein Anspruch auf eine perfekte Endlösung :-)
Grüße,
Thomas
------------------------

Ich habe die Anregung in mein Plugin eigebaut und das funktuioniert bestens. Im folgenden skizziert:

#Verwendet wird das Modul QTimer
from qgis.PyQt.QtCore import QTimer.

#Beim initiieren des Plugins unter def __init__(self, iface):
#wird eine Aktion für den Timer gestartet:

self.cron = QTimer()
self.cron.timeout.connect(self.cronEvent)

#Für meinen Aufruf unter def initGui(self) wird ein Icon angelegt:
# Baum aus  anzeigen
self.mas_TisyBaum =  QAction(QIcon ...., self.iface.mainWindow())
self.mas_TisyBaum.setEnabled(True)
self.mas_TisyBaum.setCheckable(True)
self.mas_TisyBaum.triggered.connect(self.tis_bau)
self.mas_TisyBaum_button = self.toolBar.addAction(self.mas_TisyBaum)

# das Icon ruft die Timer.Funktion auf
def tis_bau(self, checked):
        if checked:
                self.cron.start(4000)
        else:
                self.cron.stop()

# die eigentliche Funktion zum zoomen auf die Layer
def cronEvent(self):
  # Zunächst schauen ob es Werte mit 50 gibt
  vlayer = QgsProject.instance().mapLayersByName("Baeume")[0]
  vlayer.dataProvider().forceReload()
  qgis.utils.iface.setActiveLayer(vlayer)
  expr = QgsExpression('"M1"=50')
  it = vlayer.getFeatures( QgsFeatureRequest(expr) )
  anz = len(list(it))

  if anz > 0:   # wenn Werte mit 50 vorhanden sind diese wählen
    vlayer.selectByExpression('"M1"=50')
    objekte = vlayer.selectedFeatures()

    #Für jedes gewählte Objekt
    for objekt in objekte:
      # zoomen - weil es Punkte sind, einen Puffer von 30m erzeugen
      ob_geo = objekt.geometry()
      ob_geo_buf = ob_geo.buffer(30,5)
      geb = ob_geo_buf.boundingBox()
      qgis.utils.iface.mapCanvas().zoomToFeatureExtent(geb)
      qgis.utils.iface.mapCanvas().refresh()

#Mit einer Box fragen, ob zum nächsten gezoomt werden soll
       mb = QMessageBox()
       mb.setText('Nächster')
       mb.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
       return_value = mb.exec()

       # Den Eintrag 50 des gezeigten Baums löschen
       def loesch():
         feld_id = objekt.fields().indexOf('MERKER1')
         wert = None
         vlayer.startEditing()
         vlayer.changeAttributeValue(objekt.id(), feld_id, wert)
         vlayer.commitChanges()
         qgis.utils.iface.vectorLayerTools().stopEditing(vlayer)

       if return_value == QMessageBox.Ok:
         loesch()
         continue

       else:
         loesch()
         break
    else:
      pass

-------

Viele Grüße,

Claas

--
-----------------------------------------
GKG-Kassel - Dr.-Ing. Claas Leiner
QGIS-Support und mehr

Geodatenservice, Kartenwerkstatt &
GIS-Schule Kassel

Wilhelmshöher Allee 304 E
34131 Kassel
Tel. 0561/56013445
claas.lei...@gkg-kassel.de
----------------------------------------
http://www.gkg-kassel.de
----------------------------------------
Unterstützen Sie QGIS
QGIS-DE e.V. | http://qgis.de
QGIS Projekt | http://qgis.org/de/site/
--
....................................................................
FOSSGIS Veranstaltungen
https://www.fossgis.de/news/fossgis-events/

FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
GIS-Bereich und Freier Geodaten!
https://www.fossgis.de/             https://twitter.com/FOSSGIS_Verein

____________________________________________________________________
FOSSGIS-Talk-Liste mailing list
FOSSGIS-Talk-Liste@fossgis.de
https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste

Antwort per Email an