Seite 1 von 2

Script "ColorChart.py"

Verfasst: Mi 16. Mär 2016, 20:35
von Jaccumo
Bei der Installation von Scribus werden einige Scripte installiert. Dabei interessiert mich speziell folgendes Script "ColorChart.py". Zu diesem Script hätte ich einige Fragen und Änderungswünsche. Leider konnte ich den im Script benannten Autor nicht ausfindig machen. Ich hatte mich selber an die Änderungen gemacht aber mit wenig Erfolg. Leider kenne mich zu wenig mit der Syntax und den Begrifflichkeiten aus um die Änderungen vor zu nehmen. Deshalb die Frage an euch, kennt ihr eventuell den Autor oder könnt Hilfsstellung bei Änderungen geben?

Re: Script "ColorChart.py"

Verfasst: Do 17. Mär 2016, 00:58
von Julius
Hallo Jaccumo,
Jaccumo hat geschrieben:Zu diesem Script hätte ich einige Fragen und Änderungswünsche.
Schildere sie doch bitte, vielleicht können wird dir ja helfen.
Jaccumo hat geschrieben:Leider konnte ich den im Script benannten Autor nicht ausfindig machen. Ich hatte mich selber an die Änderungen gemacht aber mit wenig Erfolg. Leider kenne mich zu wenig mit der Syntax und den Begrifflichkeiten aus um die Änderungen vor zu nehmen.
Hat er auf deine E-Mails an die im Script angegebene Adresse nicht geantwortet oder kam die E-Mail „zurück“?
Was möchtest du ändern?

Zum Scripten in Scribus allgemein: Die Scripte werden in der Sprache Python (genauer Python 2, nicht das neuere Python 3) geschrieben, um die Fähigkeiten von Scribus nutzen zu können, muss das Modul scribus geladen werden. Wenn du selbst Scripte schreiben möchtest, müsstest du als erstes die Grundlagen von Python lernen und dich dann mit Scribus auseinandersetzen. Ein kleines Hallo Welt-Programm für dich, das die Scribus-Versionsnummer in einem Fenster und einem Textrahmen ausgibt:

Code: Alles auswählen

#!/usr/bin/env Python
# -*- coding: utf-8 -*-
import scribus

# Versionsnummer in Variable „scribusversion“ speichern
scribusversion = scribus.scribus_version_info

# Versionsnummer formatieren:
version = str(scribusversion[0])+'.'+str(scribusversion[1])+'.'+str(scribusversion[2])

# Fenster mit Versionsnummer ausgeben
scribus.messageBox('Scribus Version', 'Deine Scribus-Version: '+version)

# Wenn kein Dokument geöffnet ist, eines öffnen: 
if scribus.haveDoc() == False:
 scribus.newDocDialog()

# Textrahmen erzeugen: x-Position: 80, y-Position: 100, Breite: 350, Höhe: 50 und mit Text füllen
name_des_rahmens = scribus.createText(80, 100, 350, 50)
scribus.setText('Hallo Nutzer!', name_des_rahmens)

# Text an Textrahmen anhängen:
scribus.insertText('\nDeine Scribus-Version ist: '+version, -1, name_des_rahmens)
Im Moment arbeite ich an einem deutschen Scribus-Wiki, dass auch eine, momentan noch sehr unvollständige Dokumentation des Scripters beinhaltet: https://wiki.scribus-user.de/scripter:start
Jaccumo hat geschrieben:Deshalb die Frage an euch, kennt ihr eventuell den Autor oder könnt Hilfsstellung bei Änderungen geben?
Ersteres nein, letzteres: Dazu müsstest du erst einmal mitteilen, was du ändern möchtest...

Gruß
Julius

Re: Script "ColorChart.py"

Verfasst: Do 17. Mär 2016, 19:41
von Jaccumo
Vielen Dank für die schnelle Rückmeldung,
und die Unterstützung bei der Veränderung des Scripte. Dein Script mit der Ausgabe der Scribus Version hat ohne Probleme funktioniert.
Kurz vorweg, Python hatte ich schnell installiert und ein passender Editor war auch schnell gefunden. Das Module wie "Scribus" geladen werden müssen war dann auch schnell klar, aber dann gingen dir Probleme los.
Welche Befehle, Funktionen oder Prozeduren müssen wie geschrieben und mit welchen Parametern versehen werden.
Was soll am Script verändert werden:
Folgende Parameter sollen per Eingabe frei wählbar sein,
- feste Seitengröße von A4 soll frei wählbar
- Seitenränder frei wählbar
- Größe und Position der Farbfelder frei wählbar (immer ohne Rand)
auch wenn man dabei selber ein wenig rechnen muss
- Schriftart und Schriftgröße des Farbnamen
- RGB und CMYK Werte müssen nicht ausgegeben werden
dazu müssten Farbräume, Farbprofile und der Rendering Intent berücksichtigt werden
Ich hoffe, dass sind nicht zu viel Änderungen auf einmal, wenn es Schritt für Schritt umgesetzt wird wäre es besser.
MfG
Jaccumo

Re: Script "ColorChart.py"

Verfasst: Do 17. Mär 2016, 23:06
von Julius
Hallo Jaccumo,
Jaccumo hat geschrieben:Dein Script mit der Ausgabe der Scribus Version hat ohne Probleme funktioniert.
Versuche, es zu verstehen, dazu war es gedacht. Ich plane, so etwas Ähnliches mit mehr Erklärungen als Tutorial ins Wiki zu packen, aber die Zeit...
Kurz vorweg, Python hatte ich schnell installiert und ein passender Editor war auch schnell gefunden. Das Module wie "Scribus" geladen werden müssen war dann auch schnell klar, aber dann gingen dir Probleme los.
Welche Befehle, Funktionen oder Prozeduren müssen wie geschrieben und mit welchen Parametern versehen werden.
Wird Python nicht mit Scribus mitgeliefert? Ich nutze kein Windows (klingt, als ob du Windows nutzt)...
Eine Liste mit Funktionen gibt es im Wiki, einige davon werden dort schon erklärt, aber zum Arbeiten würde ich momentan die offizielle Doku benutzen, zu erreichen über: Hilfe > Handbuch für Scribus > Für Entwickler > Scripter-API

Bei Python musst du beachten, dass die Einrücktiefe die Verschachtelung in Schleifen und Bedingungen bestimmt, wo bei anderen Sprachen wie PHP oder C Schleifen zum Einsatz kommen, ein schlecht formatiertes Beispiel in PHP:

Code: Alles auswählen

$foo = 'bar'; if($foo == 'bar') {echo 'Hallöchen'; $test = 123; }
In Python musst du durch den Verzicht auf Klammern (stattdessen Einrückung) und das den Befehl beendenenes Semikolon (stattdessen Zeilenumbruch) zwangsläufig lesbar programmieren:

Code: Alles auswählen

foo = 'bar'
if foo == 'bar':
 print 'Hallöchen'
 test = 123
Als Vorgehensweise zum Lernen würde ich dir empfehlen, mein Beispielskript (und / oder ein anderes einfache Skript) durchzuarbeiten und die Befehle nachzuschlagen, zu verstehen, was sie machen und Änderungen vorzunehmen.
Und nun zu ein paar Ideen, was du ändern könntest:
Jaccumo hat geschrieben:- feste Seitengröße von A4 soll frei wählbar
Hier verstehe ich nicht, was du meinst, A4 ist immer 210 mm breit und 297 mm hoch...
Jaccumo hat geschrieben:- Seitenränder frei wählbar
Nach Zeile 153 habe ich folgendes eingefügt:

Code: Alles auswählen

    scribus.statusMessage("Preparing new document...")
    rahmenabstand_oben = float(scribus.valueDialog('Rahmenabstand oben', 'Wert (Einheit pt) eingeben:', '20'))
    rahmenabstand_seitlich = float(scribus.valueDialog('Rahmenabstand seitlich', 'Wert (Einheit pt) eingeben:', '15'))
    scribus.newDocument(scribus.PAPER_A4,  (rahmenabstand_seitlich,rahmenabstand_seitlich, rahmenabstand_oben,rahmenabstand_oben),  scribus.PORTRAIT, 1, scribus.UNIT_POINTS,  scribus.PAGE_1, 0, 1) 
    scribus.setUnit(scribus.UNIT_MILLIMETERS)
ersetzt folgenden Original-Code:

Code: Alles auswählen

    scribus.statusMessage("Preparing new document...")
    scribus.newDocument(scribus.PAPER_A4,  (15,15,  20, 20),  scribus.PORTRAIT, 1, scribus.UNIT_POINTS,  scribus.PAGE_1, 0, 1) 
    scribus.setUnit(scribus.UNIT_MILLIMETERS)
Jaccumo hat geschrieben:- Größe und Position der Farbfelder frei wählbar (immer ohne Rand) auch wenn man dabei selber ein wenig rechnen muss
Dafür ist der Befehl createRect zuständig, das Ganze geschieht in Zeile 238 des Original-Skripts, dort müsstest du deine Änderungen vornehmen (z.B. die Breite direkt statt der Variablen eintragen), du könntest das so lösen, wie das mit den Rahmenabständen weiter oben.
Jaccumo hat geschrieben:- Schriftart und Schriftgröße des Farbnamen
Dazu müsstest du rund um die Zeile 248 anpassen, bzw. ergänzen, Original-Code:

Code: Alles auswählen

    textbox=scribus.createText(h+width+5, v, 50, height)
    #set proper font size
    scribus.setFontSize(11, textbox)
    scribus.setTextAlignment(scribus.ALIGN_LEFT, textbox)
Ich glaube, setFontSize brauche ich nicht erklären ;-) Wenn du nach setFontSize folgende Zeile einfügst, kannst du den Schriftschnitt setzen:

Code: Alles auswählen

    scribus.setFont('Arial Italic', textbox)
Jaccumo hat geschrieben:- RGB und CMYK Werte müssen nicht ausgegeben werden
Ab Zeile 232 (Original):

Code: Alles auswählen

    colorDisplay = colorname
    if scribus.isSpotColor(colorname):
        colorDisplay += " (Spot Color)"
    colorstring="%s\nC %i, M %i, Y %i, K %i, \nR %i, G %i, B %i \nRGB: %s" %(colorDisplay, c, m, y, k, r, g, b,  webcolor)
Du kannst der Variablen colorstring in Zeile 235 andere Werte zuweisen, zum Beispiel nur den Namen der Farbe:

Code: Alles auswählen

    colorstring=colorDisplay
dazu müssten Farbräume, Farbprofile und der Rendering Intent berücksichtigt werden.
Uff, da bin ich am Ende meines Lateins, ich weiß nicht, ob das im Scripter geht...

Gruß
Julius

Re: Script "ColorChart.py"

Verfasst: So 20. Mär 2016, 16:28
von Jaccumo
Musterseite Farbtafel aus Scribus.pdf
(179.6 KiB) 796-mal heruntergeladen
Hallo Julius,
deine Ergänzungen sind verständlich und hilfreich. Ich konnte alles in das vorhandene Script einbauen und es hat auch alles funktioniert. In der Anlage habe ich mal eine von Hand erzeugte Farbtafel eingefügt. Es geht dabei nur um die Farbfelder und Farbnamen. Die Umrechnung in RGB, HEX oder CMYK ist nicht notwendig, kann alles entfallen. Es wäre schön, wenn gleich am Anfang die Abfrage zum Seitenformat kommt, da ich diese Tafeln nicht immer auf DIN A4 benötige. Dann die Abfrage der Größe der Farbfelder, die Textfelder sind so breit wie die Farbfelder und 5 mm darunter.
MfG Jaccumo

Re: Script "ColorChart.py"

Verfasst: So 20. Mär 2016, 18:07
von Julius
Hallo Jaccumo,
Jaccumo hat geschrieben:Es wäre schön, wenn gleich am Anfang die Abfrage zum Seitenformat kommt, da ich diese Tafeln nicht immer auf DIN A4 benötige.
Ganz einfach, den Code vom letzten Mal

Code: Alles auswählen

    scribus.statusMessage("Preparing new document...")
    rahmenabstand_oben = float(scribus.valueDialog('Rahmenabstand oben', 'Wert (Einheit pt) eingeben:', '20'))
    rahmenabstand_seitlich = float(scribus.valueDialog('Rahmenabstand seitlich', 'Wert (Einheit pt) eingeben:', '15'))
    scribus.newDocument(scribus.PAPER_A4,  (rahmenabstand_seitlich,rahmenabstand_seitlich, rahmenabstand_oben,rahmenabstand_oben),  scribus.PORTRAIT, 1, scribus.UNIT_POINTS,  scribus.PAGE_1, 0, 1) 
    scribus.setUnit(scribus.UNIT_MILLIMETERS)
durch

Code: Alles auswählen

    scribus.statusMessage("Preparing new document...")
    scribus.newDocDialog()
    scribus.setUnit(scribus.UNIT_MILLIMETERS)
ersetzen, dann kommt die normale Dokument-Erstellen-Abfrage, dort kannst du alles Mögliche einstellen.
Jaccumo hat geschrieben:Dann die Abfrage der Größe der Farbfelder, die Textfelder sind so breit wie die Farbfelder und 5 mm darunter.
Wie die Abfragen von Werten funktionieren, habe ich ja bereits erklärt, wie man das ganze zeilen- und spaltenweise durchgeht, kannst dir in diesem Skript zum erstellen von nummerierten Eintrittskarten anschauen (für dich sind die beiden ineinander verschachtelten while-Schleifen gegen Ende des Skripts interessant).

Gruß
Julius

Re: Script "ColorChart.py"

Verfasst: So 27. Mär 2016, 21:26
von Jaccumo
Hallo Julius,
vielen Dank erst einmal für die Unterstützung bei der Änderung des Scripts und den Hinweis auf die while-Schleifen. Die letzten Tage habe ich mich mit den Basics beschäftigt, da ich weder Phyton noch den Unterbau von Scribus kenne. Ich habe mir ein Script gebastelt mit dem ich diverse Werte die ich für die Berechnung der Feldposition benötige abfragen kann. Trotzdem sind z.Bsp. Folgende Zeilen im original Script für mich nicht nachvollziehbar, auch nicht im Kontext zum gesamten Code:
- 108 und 170 scribus.setSpotColor
- 169 spotDict.has_key(cname)
- 233 scribus.isSpotColor(colorname)

Da ich um die Farbfelder keinen Rahmen benötige würde ich diesen gern auf Umriss 0 mm oder Farbe keine setzen, da fehlt mir auch der passende Befehl. Der folgende Befehl setzt den Umriss auf Haarlinie – scribus.setLineWidth(0.0,rect) – Haarlinie ist aber keine definierte Größe und abhängig vom Ausgabegerät (Drucker o.ä.).

Wie kann ich den Zeilenabstand in einer Textbox auf Zeilenabstand „auto“ einstellen?

Für weiter Unterstützung wäre ich sehr dankbar, auch wenn es noch um Grundlagen geht.

MfG Jaccumo

Re: Script "ColorChart.py"

Verfasst: Mi 30. Mär 2016, 14:52
von Julius
Jaccumo hat geschrieben:Vielen Dank erst einmal für die Unterstützung bei der Änderung des Scripts und den Hinweis auf die while-Schleifen. Die letzten Tage habe ich mich mit den Basics beschäftigt, da ich weder Phyton noch den Unterbau von Scribus kenne.
Das ist gut und richtig!
Jaccumo hat geschrieben:Ich habe mir ein Script gebastelt mit dem ich diverse Werte die ich für die Berechnung der Feldposition benötige abfragen kann. Trotzdem sind z.Bsp. Folgende Zeilen im original Script für mich nicht nachvollziehbar, auch nicht im Kontext zum gesamten Code:
Jaccumo hat geschrieben:
  • 108 und 170 scribus.setSpotColor
  • 233 scribus.isSpotColor(colorname)
Spot Color ist nun mal der Begriff für eine Schmuckfarbe, isSpotColor gibt – dem Namen nach – true zurück, wenn es eine Schmuckfarbe ist, bei setSpotColor wird eine neue Sonderfarbe erzeugt.
Jaccumo hat geschrieben:169 spotDict.has_key(cname)
Hier wird überprüft, ob im Dictionary (das Python-Äquivalent zu assoziativen Arrays) spotDict ein Schlüssel, dessen Namen in der Variablen cname gespeichert ist, vorhanden ist. Such mal nach „dictionary python“, andere können das wesentlich besser erklären als ich...
Jaccumo hat geschrieben:Da ich um die Farbfelder keinen Rahmen benötige würde ich diesen gern auf Umriss 0 mm oder Farbe keine setzen, da fehlt mir auch der passende Befehl. Der folgende Befehl setzt den Umriss auf Haarlinie – scribus.setLineWidth(0.0,rect) – Haarlinie ist aber keine definierte Größe und abhängig vom Ausgabegerät (Drucker o.ä.).
Ich würde einfach keine Farbe setzen: setLineColor("none", rect), aber vielleicht gibt es aber auch bessere Methoden.
Jaccumo hat geschrieben:Wie kann ich den Zeilenabstand in einer Textbox auf Zeilenabstand „auto“ einstellen?


Eine direkte Methode habe ich nicht gefunden, aber du könntest per createParagraphStyle einen Absatzstil mit automatischen Abstand erzeugen und per setStyle auf den Textrahmen anwenden.
Jaccumo hat geschrieben:Für weiter Unterstützung wäre ich sehr dankbar, auch wenn es noch um Grundlagen geht.
Keine Ursache, ich lerne ja auch noch etwas dabei. Außerdem gibt es für meinen Geschmack zu wenig Leute, die Scribus scripten können. Im Moment sind nur wir beiden und a.l.e. in diesem Forum aktiv...

Gruß
Julius

Re: Script "ColorChart.py"

Verfasst: Mi 30. Mär 2016, 22:13
von Jaccumo
In der Scribus-Hilfe sind diverse Begriffe beschrieben. "SpotColor" + „isSpotColor“ konnte ich nicht finden, gibt es Literatur oder Internetseiten die da weiter helfen?
In meiner Farbtafel möchte ich nur Sonderfarben ausgeben alle anderen Farben sind zu vernachlässigen. Den Befehl „setSpotColor“ benötige ich demzufolge nicht. Es würde mir eine Liste mit den Sonderfarben reichen.

Zu „spotDict.has_key(cname)“ war der Hinweis perfekt. Dazu habe ich auf folgender Internetseite die passenden Infos gefunden. http://www.python-kurs.eu/python3_dictionaries.php

Noch einmal kurz zum Rahmen des Farbfeldes, auch dazu hatte ich die Hilfe von Scribus bemüht, aber leider ohne den richtigen Wert „none“zu finden. Gibt es da Quellen die die Wertevielfalt dokumentiert.

Den automatischen Zeilenabstand habe ich mit folgenden Zeilen gelöst

Code: Alles auswählen

FontSize = 10
scribus.setFontSize(FontSize, name_des_rahmens)
scribus.setLineSpacing(FontSize*1.2, name_des_rahmens)
In den meisten DTP Programmen entspricht der automatische Zeilenabstand 120% der Schriftgröße, so auch in Scribus.

Bis ich meine Farbtafeln ausgeben kann, werden wohl noch einige Nächte notwendig sein. An mein Struktogramm kann ich höchstens 10 % Code dran schreiben. Der Rest befindet sich noch im Nebel.

Ist schon schade, dass sich nicht mehr mit Scripten beschäftigen. Na ja wird eventuell noch.

MfG Jaccumo

Re: Script "ColorChart.py"

Verfasst: Do 7. Apr 2016, 18:01
von Julius
Hallo Jaccumo,
Jaccumo hat geschrieben:In der Scribus-Hilfe sind diverse Begriffe beschrieben. "SpotColor" + „isSpotColor“ konnte ich nicht finden, gibt es Literatur oder Internetseiten die da weiter helfen?
Leider nein. Ich habe in dem Bezug einfach nur gut erraten (die Funktionsnamen waren da ja relativ eindeutig).

Ich benutze folgende Informationsquellen:
  • Die offizielle Dokumentation, die – wie du schon bemerkt hast – nicht alle Funktionen abdeckt.
  • Eine Liste aller Funktionen und Variablen, die Scribus 1.4.6 bereitstellt.
  • Suchen im Internet (manchmal wurde der Quellcode von Scripten indexiert, die von der gesuchten Funktion Gebrauch machen)
  • Der Quellcode von Scribus 1.4.6 (die für den Scripter relevanten Dateien liegen unter scribus-1.4.6/scribus/plugins)
Jaccumo hat geschrieben:In meiner Farbtafel möchte ich nur Sonderfarben ausgeben alle anderen Farben sind zu vernachlässigen. Den Befehl „setSpotColor“ benötige ich demzufolge nicht. Es würde mir eine Liste mit den Sonderfarben reichen.
Wenn ich die relevante Stelle im Script richtig in Erinnerung habe, geht es an dieser Stelle darum, gerade die Sonderfarben aus dem gewählten Dokument auszulesen und in das Dokument für die Farbtabelle zu importieren...
Jaccumo hat geschrieben:Noch einmal kurz zum Rahmen des Farbfeldes, auch dazu hatte ich die Hilfe von Scribus bemüht, aber leider ohne den richtigen Wert „none“ zu finden. Gibt es da Quellen die die Wertevielfalt dokumentiert.
Nicht, dass ich wüsste. Ich habe auch keine Ahnung woher ich den Wert überhaupt kannte – vielleicht erraten? :?
Jaccumo hat geschrieben:Den automatischen Zeilenabstand habe ich mit folgenden Zeilen gelöst

Code: Alles auswählen

FontSize = 10
scribus.setFontSize(FontSize, name_des_rahmens)
scribus.setLineSpacing(FontSize*1.2, name_des_rahmens)
In den meisten DTP Programmen entspricht der automatische Zeilenabstand 120% der Schriftgröße, so auch in Scribus.
Wenn es funktioniert, ist es eine gute Lösung!
Jaccumo hat geschrieben:Ist schon schade, dass sich nicht mehr mit Scripten beschäftigen. Na ja wird eventuell noch.
Momentan fehlen einfach eine vernünftige Dokumentation und eine Einführung in das Thema, die diese Bezeichnung auch wirklich verdienen!

Gruß
Julius