Wprowadzenie do skryptów Pythona

Nowe w wersji 4.0.

Gdy zaproponowaliśmy skrypty Pythona jako jeden z Kickstarter Stretchgoals, które moglibyśmy zaimplementować obok wektorów i tekstu, to wygraliśmy głosowanie z dużą przewagą. Niektórzy ludzie wybierali tylko Pythona i nic innego. Tak więc czym są skrypty Pythona?

Czym są skrypty Python?

Python jest językiem skryptów, którego można użyć do zautomatyzowania zadań. Skrypty w Kricie oznaczają, że dodaliśmy API do krita, co jest pewną częścią oprogramowania, która pozwala Pythonowi na dostęp do Krity. Dzięki temu możemy tworzyć doki, wykonywać żmudne zadania na wielu różnych plikach, a nawet pisać własne programy eksportujące. Ludzie pracujący z grafiką komputerową, tacy jak artyści VFX i od gier komputerowych, używają często Pythona do tworzenia arkuszy duszków, automatyzują część eksportowania i więcej.

Nauka Pythona jest poza zakresem tego samouczka. Python jest często używanym językiem programowania i świetny dla początkujący, istnieje wiele materiałów, które można szybko znaleźć po wpisaniu «nauka Pythona» w wyszukiwarce sieciowej.

Ten podręcznik skupi się na tym jak użyć Pythona do automatyzacji i rozszerzenia Krity. Do tego rozpoczniemy od podstaw: Jak wykonywać polecenia Pythona w skryptowniku.

Jak włączyć wtyczkę skryptownika

Wtyczka skryptownika nie jest niezbędna do używania Pythona, lecz jest pożyteczna do prób i zabawy z Pythonem. Jest to konsola Pythona, napisana w Pythonie, której można użyć do pisania krótkich skryptów i wykonywania ich w locie.

Aby otworzyć skryptownika, wybierz Narzędzia ‣ Scripty ‣ Skryptownik. Jeśli nie ma go tam, wybierz Ustawienia ‣ Ustawienia Krity… ‣ Zarządzanie wtyczkami Pythona i przełącz „Skryptownik” na liście, aby go włączyć. Jeśli nie widzisz wtyczki skryptownika, to upewnij się, że używasz najświeższej wersji Krity.

Skryptownik wysunie okno edytora tekstu na górze i okno wyjścia na dole. Wpisz następujący tekst w obszarze tekstu:

print("witaj świecie")

Naciśnij duży przycisk odtwarzania lub skrót Ctrl + R aby wykonać skrypt. Następnie, poniżej, w obszarze wyjściowym powinno pokazać się coś takiego:

==== Uwaga: Skrypt nie został zapisany! ====
witaj świecie

Teraz mamy konsolę, która może wykonywać funkcje takie jak print() ze środowiska Pythona - lecz jak jej użyć do zarządzania Kritą?

Wykonywanie podstawowych poleceń Krity

Aby umożliwić Pythonowi porozumiewanie się z Kritą, użyjemy modułu Krity. Na szczycie każdego skryptu, napiszemy coś takiego: from krita import *.

To umożliwia nam rozmowę z Kritą poprzez Krita.instance(). Spróbujmy podwoić nasze możliwości programistyczne przy użyciu Pythona.

from krita import *

Krita.instance().action('python_scripter').trigger()

Powinieneś zobaczyć otwarte drugie okno skryptownika. Całkiem ładne! Oto bardziej rozszerzony przykład.

from krita import *

d = Krita.instance().createDocument(512, 512, "Dokument próbny Pythona", "RGBA", "U8", "", 120.0)
Krita.instance().activeWindow().addView(d)

Otworzy to nowy dokument. Python wyraźnie daje ci dużo możliwości do automatyzacji Krity. Z czasem spodziewamy się, że społeczność napisze skrypty do wszystkiego, które będzie można uruchomić wklejając je do skryptownika.

Lecz co, gdy chcesz sam napisać nowe polecenia? Najlepsze miejsce na rozpoczęcie jest bardzo proste: poszukaj przykładów napisanych przez innych ludzi! Możesz zaoszczędzić dużo czasu, jeśli ktoś inny napisał kod, na którym możesz się oprzeć. Warto także przejrzeć wtyczki Pythona, które znajdują się w /share/krita/pykrita. Istnieje także przewodnik krok po kroku dla Jak stworzyć wtyczkę Pythona dla Krity w tym podręczniku.

Prawdopodobnie będziesz potrzebować więcej danych. Do tego, będziemy musieli zobaczyć, co kryje się pod gwiazdkami, gdy napiszesz import * from Krita. Aby dowiedzieć się jakie funkcje Krita są dostępne oraz jaki ich używać, musisz przejść do dokumentacji API Krity.

API Krity

Te strony na pierwszy rzut oka mogą wyglądać na przeładowane żargonem. Jest tak ponieważ dokumentacja API Krity pochodzi z języka C++, w którym napisana jest Krita. Magia dzieje się za sprawą narzędzia Pythona o nazwie SIP, który umożliwia Pythonowi rozmowę z C++ oraz Kritą. Wynikiem końcowym jest to, ze gdy wpiszemy import krita i wywołujemy funkcje, to tak na prawdę używamy metod C++ wymienionych w tej dokumentacji.

Spójrzmy jak te rzeczy działają w szczegółach. Spójrzmy na drugi odnośnik, Spis klas Krita. Tutaj widzimy wszystkie funkcje dostępne dla wystąpienia Krity. Jeśli napiszesz dir(Krita.instance()) w Pythonie, to powinien on bardzo blisko pokrywać się z tą stroną - możesz zobaczyć dokumentację funkcji createDocument(), activeWindow() oraz action(), których można użyć powyżej.

Jedną z bardziej rzeczy trudnych do zrozumienia jest widzenie wszystkich klas C++, których używa Krita, włączając w to klasy zaczynające się na literę Q. Tutaj z pomocą przychodzi piękno SIP: próbuje on przetłumaczyć te klasy na Pythona w sposób najprostszy i najbardziej bezpośredni jak tylko jest to możliwe. Na przykład, widzisz że funkcja filters() zwraca QStringList. Jednakże, SIP przekształca QStringList na zwykłą listę ciągów znaków!

from krita import *

print(Krita.instance().filters())

Wynik jako:

['asc-cdl', 'autocontrast', 'blur', 'burn', 'colorbalance', 'colortoalpha', 'colortransfer',
'desaturate', 'dodge', 'edge detection', 'emboss', 'emboss all directions', 'emboss horizontal and vertical',
'emboss horizontal only', 'emboss laplascian', 'emboss vertical only', 'gaussian blur', 'gaussiannoisereducer',
'gradientmap', 'halftone', 'height to normal', 'hsvadjustment', 'indexcolors', 'invert', 'lens blur', 'levels',
'maximize', 'mean removal', 'minimize', 'motion blur', 'noise', 'normalize', 'oilpaint', 'perchannel', 'phongbumpmap',
'pixelize', 'posterize', 'raindrops', 'randompick', 'roundcorners', 'sharpen', 'smalltiles', 'threshold', 'unsharp',
'wave', 'waveletnoisereducer']

Jednakże, czasami przekształcenie nie udaje się tak gładko.

from krita import *

print(Krita.instance().documents())

daje coś takiego jak to:

[<PyKrita.krita.Document object at 0x7f7294630b88>,
<PyKrita.krita.Document object at 0x7f72946309d8>,
<PyKrita.krita.Document object at 0x7f7294630c18>]

Jest to lista czegoś, pewnie, lecz jak tego użyć? Jeśli wrócimy do strony dokumentacji API Krity i spojrzymy na funkcję documents(), to zauważymy, że w klasie «Document» jest klikalny odnośnik. Jeśli naciśniesz na ten odnośnik, to zobaczysz, że dokument ma funkcję o nazwie name() która zwraca nazwę dokumentu oraz funkcje width() i height() które zwracają wymiary. Tak więc gdy chcemy stworzyć sprawozdanie zestawiające dokumenty w Kricie, to moglibyśmy napisać następujący skrypt:

from krita import *

for doc in Krita.instance().documents():
    print(doc.name())
    print(" "+str(doc.width())+"x"+str(doc.height()))

Otrzymamy wynik taki jak ten:

==== Uwaga: Skrypt nie został zapisany! ====
Nienazwany
 2480x3508
szkic21
 3508x2480
Niebieski poranek
 1600x900

Mam nadzieję, że to da ci pojęcie nt poruszania się po dokumentacji API.

API Krity ma dużo więcej klas. Dostęp do nich możesz uzyskać z listy w górnym lewym narożniku lub po prostu klikając na ich nazwy, aby przejść do ich API w dokumentacji. Funkcje print() lub dir() są tutaj twoimi przyjaciółmi. Ten wiersz wyświetli spis wszystkich działań w Kricie – możesz zamienić jedno z tych poleceń zamiast «python_scripter» w przykładzie powyżej.

[print([a.objectName(), a.text()]) for a in Krita.instance().actions()]

Moduł Pythona inspect został stworzony do tego rodzaju zadań. Oto użyteczna funkcja, która wyświetla dane o klasie w konsoli.

import inspect
def getInfo(target):
    [print(item) for item in inspect.getmembers(target) if not item[0].startswith('_')]

getInfo(Krita.instance())

W końcu, w dodatkowo do dokumentacji LibKis, dokumentacja Qt, bo Krita używa PyQt do udostępnienia niemalże całego API Qt dla Pythona. W ten sposób możesz tworzyć całe okna z przyciskami i formularzami, przy użyciu dokładnie tych samych narzędzi, których używa Krita! Możesz przeczytać Dokumentację Qt oraz Dokumentację PyQt po więcej szczegółów, a także załączone wtyczki, aby zobaczyć jak one działają.

Szczegóły techniczne

Skrypty Pythona na Windowsie

Aby skrypty Pythona działały na Windowsie 7/8/8.1 będziesz musiał wgrać Uniwersalną bibliotekę uruchomieniową C ze strony Microsoftu. (Windows 10 ma ją już wgraną.)

Python 2 oraz 3

Domyślnie Krita jest budowana dla Pythona 3.

Jednakże istnieje możliwość, skompilowania go na Pythonie 2. Aby to zrobić, musisz dodać takie coś w wierszu ustawień cmake:

-DENABLE_PYTHON_2=ON