Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripter:mini-tutorial

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
scripter:mini-tutorial [2016/09/18 14:54]
julius Mehr Beispiele
scripter:mini-tutorial [2018/04/01 16:15] (aktuell)
julius [Mini Tutorial] Verständlichkeit
Zeile 4: Zeile 4:
  
   * Einen speziell angepassten Kalender erzeugen   * Einen speziell angepassten Kalender erzeugen
-  * Aus einer Datenbank Daten eintragen (beispielsweise einen Katalog aus einem Webshop heraus erzeugen)+  * Aus einer Datenbank Daten holen und in ein Scribus-Dokument einfügen (beispielsweise einen Katalog aus einem Webshop heraus erzeugen)
   * Artikel eines Magazins mit einem Content Managment System (CMS) synchronisieren   * Artikel eines Magazins mit einem Content Managment System (CMS) synchronisieren
   * Serienbriefe erzeugen   * Serienbriefe erzeugen
Zeile 10: Zeile 10:
   * uvm.   * uvm.
  
-Scripte in Scribus werden in der Programmiersprache Python (Version 2) geschrieben und kommunizieren über das Modul ''scribus'' mit Scribus. Auf diesen Seiten wird lediglich die Scripter-API erläutert und dokumentiert, allerdings nicht, wie man in Python programmiert – hierfür gibt es bereits eine Vielzahl von freien Tutorials im Web, sodass wir an dieser Stelle auf die Neuerfindung des Rades verzichten.+Scripte in Scribus werden in der Programmiersprache Python (Version 2) geschrieben und kommunizieren über das Modul ''scribus'' mit Scribus, sodass die Fähigkeiten und Vorteile von Python (Syntax, Dateizugriff, Datenbank-APIs usw.) in Kombination mit denen von Scribus genutzt werden können. Auf diesen Seiten wird lediglich diese Scripter-API erläutert und dokumentiert, allerdings nicht, wie man in Python programmiert – hierfür gibt es bereits eine Vielzahl von freien Tutorials im Web, sodass wir an dieser Stelle auf die Neuerfindung des Rades verzichten.
  
-<note important>Es ist eine schlechte Idee, das Script als ''scribus.py'' abzulegen, da der Interpreter beim nächsten Ausführen dann ''scribus.pyc'' als Modul ''scribus'' lädt anstatt das des Programms Scribus!</note>+<note important>Es ist eine schlechte Idee, ein Script als ''scribus.py'' abzulegen, da der Interpreter beim nächsten Ausführen dann das als ''scribus.pyc'' kompilierte ''scribus.py'' als Modul ''scribus'' lädt anstatt das des Programms Scribus!</note>
  
 Wenn sie ein Skript ausführen möchten, öffnen sie es in Scribus über den Menüpunkt //Script// -> //Script ausführen...// Wenn sie ein Skript ausführen möchten, öffnen sie es in Scribus über den Menüpunkt //Script// -> //Script ausführen...//
  
-===== Richtige Zeichenkodierung=====+===== Richtige Zeichenkodierung =====
 <code python> <code python>
 #!/usr/bin/env Python #!/usr/bin/env Python
Zeile 22: Zeile 22:
 </code> </code>
  
-Die erste Zeile legt fest, dass es sich um ein Python-Programm handelt.+Die erste Zeile legt fest, dass es sich um ein Python-Programm handelt und wird eigentlich nur benötigt, wenn man das Script stand-alone also außerhalb von Scribus ausführt und kann daher in Python-Scripten für Scribus weggelassen werden.
  
 Als nächstes legen wir die richtige Zeichenkodierung fest. Da der Standard in Python ASCII ist, sollten wir direkt das bessere UTF-8 wählen, um keine Probleme mit ä, ö und ähnlichen nicht-ASCII-Zeihen zu bekommen.\\ Als nächstes legen wir die richtige Zeichenkodierung fest. Da der Standard in Python ASCII ist, sollten wir direkt das bessere UTF-8 wählen, um keine Probleme mit ä, ö und ähnlichen nicht-ASCII-Zeihen zu bekommen.\\
Zeile 29: Zeile 29:
 ===== Einen Textrahmen anlegen ===== ===== Einen Textrahmen anlegen =====
 <file python textframe.py> <file python textframe.py>
-#!/usr/bin/env Python 
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 import scribus import scribus
Zeile 57: Zeile 56:
 Wenn Sie in Scripten [[scripter:dokument_befehle#unit_-typen|Längenangaben]] verwenden, werden diese immer in der Einheit des Dokuments interpretiert – erstellen Sie also ein Script und arbeiten immer mit Millimetern, funktioniert alles wie erwartet; wenn Sie das Script allerdings auf ein Dokument in der Maßeinheit Punkt anwenden, passen die Angaben allerdings nicht mehr. Die Lösung ist einfach: Am Anfang des Programms speichern sie die voreingestellte Maßeinheit in einer Variablen, setzen ihre Maßeinheit, führen Ihre Manipulationen am Dokument aus und setzen dann am Schluss die Maßeinheit wieder auf den vorherigen Wert zurück: Wenn Sie in Scripten [[scripter:dokument_befehle#unit_-typen|Längenangaben]] verwenden, werden diese immer in der Einheit des Dokuments interpretiert – erstellen Sie also ein Script und arbeiten immer mit Millimetern, funktioniert alles wie erwartet; wenn Sie das Script allerdings auf ein Dokument in der Maßeinheit Punkt anwenden, passen die Angaben allerdings nicht mehr. Die Lösung ist einfach: Am Anfang des Programms speichern sie die voreingestellte Maßeinheit in einer Variablen, setzen ihre Maßeinheit, führen Ihre Manipulationen am Dokument aus und setzen dann am Schluss die Maßeinheit wieder auf den vorherigen Wert zurück:
 <code python> <code python>
-#!/usr/bin/env Python 
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 import scribus import scribus
Zeile 79: Zeile 77:
 In diesem Beispiel wählen Sie //ein// Textfeld aus und führen dann ein Skript aus, das an den Text das aktuelle Datum und die Uhrzeit anfügt (deshalb auch ''insertText('Text', -1)'' (-1 für das Anhängen, sonst Positionsangabe im Text) statt ''setText'' wie im zweiten Beispiel, letzteres würde bereits vorhandenen Text ersetzen). In diesem Beispiel wählen Sie //ein// Textfeld aus und führen dann ein Skript aus, das an den Text das aktuelle Datum und die Uhrzeit anfügt (deshalb auch ''insertText('Text', -1)'' (-1 für das Anhängen, sonst Positionsangabe im Text) statt ''setText'' wie im zweiten Beispiel, letzteres würde bereits vorhandenen Text ersetzen).
 <file python insert-datetime.py> <file python insert-datetime.py>
-#!/usr/bin/env Python 
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 import scribus import scribus
Zeile 97: Zeile 94:
 Indem wir mit einer ''while''-Schleife über alle ausgewählten Objekte iterieren, können wir das Ganze natürlich auch für mehrere ausgewählte Textrahmen durchführen und an alle das aktuelle Datum anhängen: Indem wir mit einer ''while''-Schleife über alle ausgewählten Objekte iterieren, können wir das Ganze natürlich auch für mehrere ausgewählte Textrahmen durchführen und an alle das aktuelle Datum anhängen:
 <file python insert-multiple.py> <file python insert-multiple.py>
-#!/usr/bin/env Python 
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 import scribus import scribus
Zeile 114: Zeile 110:
    count = count + 1    count = count + 1
    scribus.insertText('\n'+zeit.strftime("→ %Y-%m-%d %H:%M"), -1, objekt)    scribus.insertText('\n'+zeit.strftime("→ %Y-%m-%d %H:%M"), -1, objekt)
 +</file>
 +
 +===== Mehrere Objekte bearbeiten =====
 +Indem man mit einer ''for''-Schleife über mehrere (ausgewählte) Objekte iteriert, lassen sich Operationen, die auf viele Objekte angewendet werden müssen, automatisieren. Im Beispiel wollen wir auf mehrere ausgewählte Textrahmen einen Absatzstil mittels [[scripter:objekte_erzeugen_und_bearbeiten#setstyle|setStyle]] anwenden, was über die Eigenschaften-Palette nicht möglich ist:
 +<file python setStyle.py>
 +# -*- coding: utf-8 -*-
 +import scribus
 +
 +anzahl = scribus.selectionCount()
 +
 +if anzahl >= 1:
 +  for i in xrange(0, anzahl):
 +    scribus.selectObject(scribus.getSelectedObject(i))
 +    scribus.setStyle("BeispielStil")
 +    #Namen anzeigen, falls benötigt...
 +    #scribus.messageBox("", str(i)+"=>"+scribus.getSelectedObject(i))
 +else:
 +  scribus.messageBox("Keine Objekte ausgewählt", "Es wurden keine Objekte ausgewählt, bitte wählen sie welche aus!", scribus.ICON_WARNING)
 </file> </file>
  
Zeile 135: Zeile 149:
 Einige Funktionen sind erst ab einer bestimmten Scribus-Version verfügbar, beispielsweise der [[seiten_befehle#applymasterpage|applyMasterPage()]]-Befehl. Um dem Nutzer eine verständliche Fehlermeldung an die Hand geben zu können, wenn man sich auf diese Funktionen verlässt, kann man die Scribus-Version abfragen und vergleichen: Einige Funktionen sind erst ab einer bestimmten Scribus-Version verfügbar, beispielsweise der [[seiten_befehle#applymasterpage|applyMasterPage()]]-Befehl. Um dem Nutzer eine verständliche Fehlermeldung an die Hand geben zu können, wenn man sich auf diese Funktionen verlässt, kann man die Scribus-Version abfragen und vergleichen:
 <file python version-abfragen.py> <file python version-abfragen.py>
-#!/usr/bin/env Python 
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 import sys, scribus import sys, scribus
scripter/mini-tutorial.1474203273.txt.gz · Zuletzt geändert: 2016/09/29 16:32 (Externe Bearbeitung)