@Stefan: top, das ist natürlich noch eleganter
@Claas: jetzt ist Dir alles klar, musst es nur noch umsetzen :-)
Bernhard

> Stefan Giese (WhereGroup) <stefan.gi...@wheregroup.com> hat am 29.09.2022 
> 13:09 CEST geschrieben:
> 
>  
> Hallo alle,
> 
> gerade noch die Idee gehabt ob es so was wie ein watcher Klasse in Qt 
> gibt...und siehe da:
> 
> |from PyQt5.QtCore import QFileSystemWatcher watcher = 
> QFileSystemWatcher() watcher.addPath(filePath) watchedLayer = vlayer def 
> reload_watched_layer(): watchedLayer.dataProvider().forceReload() 
> watcher.fileChanged.connect(reload_watched_layer)|
> 
> Am 29.09.2022 um 13:04 schrieb Bernhard Ströbl:
> > Hallo Thomas und Liste,
> > genau mit dem QTimer habe ich das seinerzeit auch gemacht. Bei mir war es 
> > auch so, dass das andere Programm eine Textdatei geschickt bzw. etwas in 
> > die Zwischenablage gelegt hat mit einem Schlüsselwort drin. Der QTimer 
> > prüft dann regelmässig, ob was da ist und wenn ja, emittet er ein Signal.
> > Bei der dbf könnte QGIS ja den Zeitpunkt der letzten Änderung prüfen 
> > (QtCore.QFileInfo.lastModified()), und nur, wenn der neuer ist als der 
> > letze, wird der Layer refresht, braucht auf jeden Fall weniger Zeit und 
> > Ressourcen als ein Refresh des Layers mit nachfolgender Abfrage; geht 
> > natürlich nur, wenn es gelegentliche Änderungen gibt und nicht alle paar 
> > Sekunden, hängt also auch wieder vom Einsatzbereich ab.
> > Grüße
> > Bernhard
> >
> >> Thomas B<rdbath.regiod...@gmail.com>  hat am 29.09.2022 12:22 CEST 
> >> geschrieben:
> >>
> >>   
> >> Hallo in die Runde,
> >> ich teile grundsätzlich die Bedenken gegen Lösungen, wo ein Timer im
> >> Hintergrund läuft und im selben Thread werkelt und würde auch wenn möglich
> >> Signale abgreifen.
> >> Bei Änderungen an der DBF durch einen anderen Prozesses wird das allerdings
> >> schwierig, weil QGIS ja nicht ohne Anlass dauernd auf  die Festplatte
> >> schaut, ob sich was ändert. Sprich solange du keinen Refresh auslöst, z.B.
> >> durch Bewegen innerhalb des Layers wird QGIS erst mal nichts von den
> >> Änderungen auf der Platte mitbekommen.
> >> Man könnte in den Layereigenschaften das Aktualisierungsinterval nutzen
> >> aber in zu kurzen Intervallen will das auch niemand machen.
> >>
> >> Ich persönlich differenziere auch etwas nach der Frage, wie breit der
> >> Nutzerkreis ist. Bei hausinternen Plugins mit klar begrenztem/geschulten
> >> Nutzerkreis würde ich ggf. auch Sachen nutzen, die ich bei einem breiten
> >> Nutzerkreis (offizielles Repo o.ä.) nicht machen würde. QTimer haben wir
> >> hausintern zwar nicht bei eigenen Plugins im Einsatz aber das wäre ggf. so
> >> ein Fall ) .
> >>
> >> Vor ein paar Jahren hatte ich mal bei einer Behörde hier in Freiburg
> >> mitbekommen, dass die ein abzulösendes GIS mit QGIS synchronisieren
> >> wollten, sprich alle X Sekunden schrieb das alte GIS eine kleine txt-Datei
> >> mit dem zuletzt eingestellten Mapextent und QGIS schaute per QTimer drauf
> >> und stellte den Mapextent auch so ein. Wurde damals von einem
> >> Dienstleister, der mehrere QGIS-Core-Entwickler an Bord hat entwickelt.
> >> Es gibt auch andere Plugins, die mit einem QTimer arbeiten wie den
> >> AutoSaver, den ich seit mehreren Jahren tagtäglich aktiv habe (
> >> https://github.com/enricofer/autoSaver/blob/master/autosave.py#L203  )
> >>
> >> und auch mit dem Plugin SyncQGISWithDir des begabten German Carillo hab ich
> >> sehr gute Erfahrungen gemacht unter QGIS2 (
> >> https://github.com/gacarrillor/SyncQGISWithDir/blob/master/syncqgiswithdir.py
> >> ) .
> >>
> >> Wenn möglich wäre es sicher schick die Hauptarbeit (auf  die Platte
> >> schauen, ob sich was geändert  hat) in einen eigenen Task/Thread
> >> auszulagern. Dafür könnte evtl. das hier  hilfreich sein:
> >> https://gis.stackexchange.com/questions/307379/threading-with-timer-in-pyqgis/307631#307631
> >>
> >> Oder man lagert den Job zum Überwachen ganz aus QGIS aus in ein
> >> Standalone-Script, das einen TCP-Server betreibt und QGIS hat nur den
> >> Receiver dazu an Bord... Inspiration könnte man sich da aus dem
> >> QgsRemoteControl Plugin der Kollegen von Datalyze holen (
> >> https://github.com/datalyze-solutions/QgsRemoteControl  ) .
> >> Wird zwar schon ne Weile nicht mehr weiterentwickelt aber zeigt ja die
> >> Grundidee auf.
> >>
> >> Auf jeden Fall eine spannende und in der Praxis immer mal wieder
> >> vorkommende Fragestellung, wie QGIS etwas mitbekommt, wenn sich Daten
> >> außerhalb von QGIS ändern.
> >>
> >> Am schicksten wäre die Lösung mit PostgreSQL, weil man da ja direkt bei
> >> Datenänderung über einen Trigger ein Signal an QGIS senden könnte, was von
> >> QGIS dann überwacht wird... rein mit Bordmitteln.
> >>
> >> Aber die Tatsache, dass Shapefiles heute manchmal halt bei
> >> Kunden/Firmen/Behörden noch im Einsatz sind kennt wohl jeder hier in der
> >> Liste und fällt unter den Hashtag #ischso :-)
> >>
> >> Viele Grüße,
> >> Thomas
> >>
> >>
> >>
> >>
> >> Am Mi., 28. Sept. 2022 um 16:16 Uhr schrieb Claas Leiner <
> >> claas.lei...@gkg-kassel.de>:
> >>
> >>> Hallo Kolleginnen und Kollegen,
> >>>
> >>> ich bin ja jetzt auch immer wieder mit Python unterwegs
> >>> und versuche folgende umzusetzen:
> >>>
> >>> In einem Punkt-Shapefile (leider Shapefile) gibt es
> >>> die Spalte M1. Wenn ein externes Programm auf die DBF zugrieft und den
> >>> Attributwert 50 in M1 einträgt, soll QGIS automatisch zu den
> >>> betreffendem Punkt zoomen.
> >>>
> >>> Ich bekommes es in meinem Plugin hin, das QGIS mit einem Klick auf ein
> >>> Icon automatisch zu den Punkten zoomt
> >>>
> >>> QGIS soll diese Veränderungen jedoch im Hintergrund erkennen und
> >>> automatisch reagieren. Also ich klicke aufs Icon und nichts passiert,
> >>> wenn kein Wert 50 vorhanden ist. Die Schaltfläche bleibt "checked" und
> >>> wenn das externe Programm eine 50 in M1 einträgt, reagiert QGIS, ohne
> >>> das ich ein weiteres mal klicken muss.
> >>>
> >>> Ich habe versucht das folgendermaßen umzusetzen:
> >>> Mit einem Klick auf ein Icon wird folgende Funktion aufgerufen:
> >>> -----------------------------------
> >>>
> >>> def tis_bau(self, checked):
> >>>       vlayer = QgsProject.instance().mapLayersByName("Baeume")[0]
> >>>
> >>>       while checked:
> >>>           time.sleep(1)
> >>>           expr = QgsExpression('"M1"=50')
> >>>           it = vlayer.getFeatures( QgsFeatureRequest(expr) )
> >>>           anz = len(list(it))
> >>>
> >>>           if anz > 0:
> >>>          #hier die Anwesiungen um zu den Objekten zu zoomen
> >>>
> >>>           else:
> >>>               continue
> >>>       else:
> >>>           # hier igentetwass
> >>>           break
> >>> --------------------------------
> >>>
> >>> Die While-Schleife soll im Sekundentakt prüfen, ob der Wert 50
> >>> eingetragen wurde und im Entdeckungsfall die Aktion auslösen.
> >>> Wenn jetzt aber keine 50er gefunden werden, friert die While-Schleife
> >>> QGIS ein.
> >>> Ist es möglich, den Code so zu zuschreiben, dass die While-Schleife im
> >>> Hintergrund läuft, ohne die  Benutzeroberfläche zu blockieren?
> >>> Kann ich mein Ziel mit diesem Ansatz überhaupt erreichen?
> >>>
> >>> Ich freue mich über Ideen,
> >>>
> >>> 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
> >>>
> >> -- 
> >> ....................................................................
> >> 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
> 
> -- 
> Mit freundlichen Grüßen
> Stefan Giese
> Projektleiter/Consultant
> ---------------------------------------------
> Aufwind durch Wissen!
> Jetzt neu: Web-Seminare und Online-Schulungen
> bei derwww.foss-academy.com
> ---------------------------------------------
> WhereGroup GmbH
> Schwimmbadstr. 2
> 79100 Freiburg
> Germany
> 
> Tel.: +49 (0)761 / 519 102 - 61
> Fax: +49 (0)761 / 519 102 - 11
> 
> stefan.gi...@wheregroup.com
> www.wheregroup.com
> Geschäftsführer:
> Olaf Knopp, Peter Stamm
> Amtsgericht Bonn, HRB 9885
-- 
....................................................................
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