Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  QGIS
  Layout, Python

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Layout, Python (794 mal gelesen)
MoritzKu
Mitglied
Ingenieur

Sehen Sie sich das Profil von MoritzKu an!   Senden Sie eine Private Message an MoritzKu  Schreiben Sie einen Gästebucheintrag für MoritzKu

Beiträge: 8
Registriert: 26.05.2017

erstellt am: 24. Sep. 2021 22:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo in die Runde,
eigentlich komme ich von Bricscad, wo ich mir mit Lisp eine ganze Reihe von Helferlein geschrieben habe.
Nun darf ich mich mit QGis bgeschäftigen. Python ist mir nicht ganz unbekannt. Der Zugriff auf die Elemente von QGis ist am Anfang aber doch etwas schwer.
Ich habe 19 Layouts mit. Mit Python ist es mir schon gelungen, alle Layous mit einer Schleife abzufragen. Aber beim gezielten Zugriff auf die Elemente hört es auf. Wie kann ich die Layouttexte im Zeichnungsspiegel auslesen und ins Clipboard oder eine Textdatei exportieren? Ich dachte daran, allen diesen Texten in den Layouts jeweils die gleiche ID zu geben und dann diese Elemente byID zu selectieren und auszulesen. Das geht sicher ganz einfach, nur weiß ich leider nicht, wie.
Vielen Dank
MoritzKu

------------------
MoKu

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ISpeech
Mitglied
Flurbereiniger


Sehen Sie sich das Profil von ISpeech an!   Senden Sie eine Private Message an ISpeech  Schreiben Sie einen Gästebucheintrag für ISpeech

Beiträge: 108
Registriert: 25.01.2018

QGIS 3.10.1/3.16.0, Windows 10 Home; i3-4030U, 1,9 GHz, 8 GB RAM

erstellt am: 25. Sep. 2021 19:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MoritzKu 10 Unities + Antwort hilfreich

Bricscad kenne ich nicht, vielleicht verwendest Du Bezeichnungen die in QGIS anders heißen. Auf welche Klasse greifst Du zu, um auf die Layouts zuzugreifen? Und wie sieht die Schleife aus?

Ansonsten hilft Dir vielleicht mein YouTube Kanal PyQGIS weiter. Hier zeige ich an verschiedensten Beispielen, wie man mit der API arbeitet.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

Autocad Map, ArcGIS (und demnächst QGIS ? )
Visual Basic

erstellt am: 25. Sep. 2021 20:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MoritzKu 10 Unities + Antwort hilfreich

So groß sind die unterschiedlichen Bezeichnungen nicht Modell enthält die Zeichnungselemente bzw. Layer in QGis, Layout oder Kartendarstellung den Druckrahmen, Legenden, Planstempel ...
Von daher stellt sich mir die Frage, was soll denn aus dem Layout herausgelesen werden? Die Texte des Druckrahmens? Oder doch die durch den Kartenrahmen begrenzten Modellelemente?

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MoritzKu
Mitglied
Ingenieur

Sehen Sie sich das Profil von MoritzKu an!   Senden Sie eine Private Message an MoritzKu  Schreiben Sie einen Gästebucheintrag für MoritzKu

Beiträge: 8
Registriert: 26.05.2017

erstellt am: 27. Sep. 2021 08:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Na Hallo,
das ging ja schnell.
Ich habe versucht, mit einer for- Schleife alle Layouts abzuarbeeiten.
Und dann soll immer auf einen Layouttext zugegriffen werden. Diesem Text wollte ich in allen Layouts die id 100 geben. Und dann wollte ich den Textwert auslesen und in einer Variable speichern. Es würde mir reichen, wenn ich diese Texte als Liste irgendwo kopieren kann, damit ich sie in ein Textdokument einfügen kann. Ich habe aber keine Ahnung, wie ich Daten aus dem Layouttext auslesen kann.
Mein erster Anfang sieht so aus.

project = QgsProject.instance()       
manager = project.layoutManager()     
layouts_list = manager.printLayouts()
for layout in layouts_list:
    print (layout.name())
    Zeichnung = layout.itemById("100")
    print (Zeichnung.displayname)
Vielen Dank
MoritzKu

------------------
MoKu

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ISpeech
Mitglied
Flurbereiniger


Sehen Sie sich das Profil von ISpeech an!   Senden Sie eine Private Message an ISpeech  Schreiben Sie einen Gästebucheintrag für ISpeech

Beiträge: 108
Registriert: 25.01.2018

QGIS 3.10.1/3.16.0, Windows 10 Home; i3-4030U, 1,9 GHz, 8 GB RAM

erstellt am: 27. Sep. 2021 13:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MoritzKu 10 Unities + Antwort hilfreich

Versuche mal folgendes:

project = QgsProject.instance()     
manager = project.layoutManager()   
layouts_list = manager.printLayouts()
for layout in layouts_list:
    print (layout.name())
    for tmpitem in layout.items():
        print(tmpitem)

Damit bekommst Du eine Klasse vom jeweiligen Item zurück. Basisklasse ist QgsLayoutItem

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MoritzKu
Mitglied
Ingenieur

Sehen Sie sich das Profil von MoritzKu an!   Senden Sie eine Private Message an MoritzKu  Schreiben Sie einen Gästebucheintrag für MoritzKu

Beiträge: 8
Registriert: 26.05.2017

erstellt am: 29. Sep. 2021 10:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
leider konnte ich mich erst heute wieder mit QGis beschäftigen. Ist leider alles nicht so einfach.
Mein ursprüngliches script lief das letzte Mal ohne Fehlermeldung.
Heute kommt bei meinem und bei deinem script der Fehler:
Traceback (most recent call last):
  File "C:\PROGRA~1/QGIS32~1.0/apps/qgis/./python/plugins\processing\script\ScriptEditorDialog.py", line 228, in runAlgorithm
    exec(self.editor.text(), _locals)
  File "<string>", line 1, in <module>
NameError: name 'QgsProject' is not defined

Ich habe inzwischen QFieldSync und in diesem Zusammenhang (weil QFieldSync nicht lief)  QGis auf 3.20.3 und Python auf 9.5.7 aktualisiert. Kann das Problem damit zusammenhängen?
Vielen dAnk
MoritzKu

------------------
MoKu

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ISpeech
Mitglied
Flurbereiniger


Sehen Sie sich das Profil von ISpeech an!   Senden Sie eine Private Message an ISpeech  Schreiben Sie einen Gästebucheintrag für ISpeech

Beiträge: 108
Registriert: 25.01.2018

QGIS 3.10.1/3.16.0, Windows 10 Home; i3-4030U, 1,9 GHz, 8 GB RAM

erstellt am: 29. Sep. 2021 17:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MoritzKu 10 Unities + Antwort hilfreich

Versuche mal in die erste Zeile folgendes zu Schreiben:

from qgis.core import QgsProject

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MoritzKu
Mitglied
Ingenieur

Sehen Sie sich das Profil von MoritzKu an!   Senden Sie eine Private Message an MoritzKu  Schreiben Sie einen Gästebucheintrag für MoritzKu

Beiträge: 8
Registriert: 26.05.2017

erstellt am: 04. Okt. 2021 09:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank,
ein kleiner Fortschritt,
aber nun kommt diese Fehlermeldung
Traceback (most recent call last):
  File "C:\PROGRA~1/QGIS32~1.0/apps/qgis/./python/plugins\processing\script\ScriptEditorDialog.py", line 228, in runAlgorithm
    exec(self.editor.text(), _locals)
  File "<string>", line 8, in <module>
AttributeError: 'NoneType' object has no attribute 'displayname'

MoritzKu

------------------
MoKu

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ISpeech
Mitglied
Flurbereiniger


Sehen Sie sich das Profil von ISpeech an!   Senden Sie eine Private Message an ISpeech  Schreiben Sie einen Gästebucheintrag für ISpeech

Beiträge: 108
Registriert: 25.01.2018

QGIS 3.10.1/3.16.0, Windows 10 Home; i3-4030U, 1,9 GHz, 8 GB RAM

erstellt am: 05. Okt. 2021 15:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MoritzKu 10 Unities + Antwort hilfreich

Du musst displayName mit einem großen N schreiben.

Manche Layoutobjekte haben aber kein Attribut displayName. Das musst Du mit python vorher abfangen. Auch ein None-"Objekt" musst Du abfangen, weil das natürlich auch kein Attribut hat.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MoritzKu
Mitglied
Ingenieur

Sehen Sie sich das Profil von MoritzKu an!   Senden Sie eine Private Message an MoritzKu  Schreiben Sie einen Gästebucheintrag für MoritzKu

Beiträge: 8
Registriert: 26.05.2017

erstellt am: 14. Okt. 2021 20:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für Deine Hilfe,
das Item mit der ID 100 wird in jedem Layout gefunden.
Nun gibt es
1. Das Problem, dass ich weiß, wie ich den Inhalt des Textobjektes auslesen kann und
2. Wenn das Item nicht gefunden wird, kann ich die Fehlermeldung nicht abfangen.
Ich lass das erstmal. Es gibt wichtigere Baustellen. Aber trotzdem vielen Dank.
MoritzKu

------------------
MoKu

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz