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:
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:
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