Introdução à Programação em Python¶
Added in version 4.0.
Quando oferecemos a programação em Python como um dos passatempos do Kickstarter, havia a hipótese de ser implementada a seguir aos vectores e ao texto, mas passou à frente de tudo na altura. Algumas pessoas até escolheram Python e mais nada. Por isso, o que é exactamente a programação em Python?
O que é a Programação em Python?¶
O Python é uma linguagem de programação que poderá ser usada para automatizar as tarefas. O que a programação em Python significa no Krita é que foi adicionada uma API ao Krita, o que é uma espécie de programação que permite ao Python aceder a componentes do Krita. Com isto, podemos criar áreas acopláveis, efectuar tarefas frequentes com uma grande variedade de ficheiros diferentes e até criar os nossos módulos de exportação. As pessoas que lidam com computação gráfica, como o VFX e os artistas de jogos, usam o Python para um monte de coisas, como páginas de imagens dos jogadores, automatizar partes da exportação, entre outras coisas.
Está fora do âmbito deste manual ensinar-lhe o Python em si. Contudo, dado que o Python é uma linguagem de programação bastante popular e é óptima para principiantes, existem quantidades enormes de material de aprendizagem que pode encontrar rapidamente com uma pesquisa sobre “aprender Python” na Internet.
Este manual focar-se-á sim em como usar o Python para automatizar e estender o Krita. Para tal, iremos primeiro começar pelas bases: Como correr comandos em Python no programador.
Como Activar o “Plugin” do Programador¶
O “plugin” do programador não é necessário para usar o Python, mas é bastante útil para testar e brincar com o Python. É uma consola de Python, criada em Python, que pode ser usada para criar pequenos programas e executá-los na hora.
Para abrir o programador, vá a . Se não o encontrar aí, vá a e active o «Programador» na lista para o activar. Se não estiver lá o “plugin” do programador, certifique-se que está a usar uma versão actualizada do Krita.
O programador irá aparecer com uma pequena janela de edição de texto no topo e uma janela de resultados em baixo. Introduza o seguinte na área de texto:
print("olá mundo")
Carregue no botão grande de reprodução ou carregue em Ctrl + R para executar o programa. Depois, em baixo, na área de resultados, deverá aparecer o seguinte:
==== Atenção: Programa não gravado! ====
olá mundo
Agora temos uma consola que consegue correr funções como o print() no ambiente de Python - mas como é que conseguimos usá-la para gerir o Krita?
Executar comandos básicos do Krita¶
Para permitir ao Python comunicar com o Krita, iremos usar o módulo do Krita. No topo de cada programa, iremos escrever: from krita import *.
Isto permite-nos aceder ao Krita.instance(). Vamos experimentar duplicar as nossas competências de programação em Python.
from krita import *
Krita.instance().action('python_scripter').trigger()
Deverá ver uma segunda janela do programador aberta. Muito bom! Agora está aqui um exemplo ligeiramente mais avançado.
from krita import *
d = Krita.instance().createDocument(512, 512, "Documento de teste em Python", "RGBA", "U8", "", 120.0)
Krita.instance().activeWindow().addView(d)
Isto irá agora abrir um novo documento. Claramente o Python dá-lhe um boa quantidade de controlo para automatizar o Krita. Com o tempo, esperamos que a comunidade crie todos os tipos de programas que possa usar, bastando para tal colá-los no programador.
Mas e se quiser criar comandos novos para si? O melhor local para começar é muito simples: procure por exemplos feitos por outras pessoas! Poderá poupar bastante tempo se alguém já tiver criado código no qual se possa basear. Também vale a pena olhar para os “plugins” de Python, que se localizam em /share/krita/pykrita. Existe também um manual passo-a-passo para o Como criar um “plugin” do Krita em Python aqui no manual.
Mas é provável que necessite de mais informações. Para tal, iremos ver o que está escondido atrás do asterisco quando executa import * from Krita. Para saber quais as funções do Krita que estão disponíveis e como usá-las, irá querer ver directamente a documentação de referência da API do Krita.
API do Krita¶
Estas páginas poderão parecer estar cheias de termos técnicos à primeira vista. Isto é porque a documentação da API do Krita é derivada da linguagem em C++ com que foi feito o Krita. A magia acontece por causa de uma ferramenta do Python chamada SIP, que permite que o Python fale em C++ e, por sua vez, com o Krita. O resultado final é que, quando invocamos o import krita e chamamos as funções, estamos de facto a usar os métodos em C++ apresentados nessa documentação.
Let’s see how this stuff works in more detail. Let’s take a look at the second link, the Krita class reference. There we can see all the functions available to the Krita instance. If you type dir(Krita.instance()) in Python, it should match this page very closely - you can view the documentation of the functions createDocument(), activeWindow(), and action() which we used above.
Um dos pontos mais confusos é ver todas as classes de C++ que o Krita usa, incluindo as classes do Qt que começam por Q. Mas aí está a beleza do SIP: ele tenta fazer a tradução dessas classes para o Python o mais simples e intuitivas que for possível. Por exemplo, poderá ver que a função filters() devolve uma QStringList. Contudo, o SIP converte essas QStringLists para listas de cadeias de caracteres normais do Python!
from krita import *
print(Krita.instance().filters())
Devolve o resultado como:
['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']
Contudo, algumas vezes a conversão não corre assim tão bem.
from krita import *
print(Krita.instance().documents())
dando-lhe algo como o seguinte:
[<PyKrita.krita.Document object at 0x7f7294630b88>,
<PyKrita.krita.Document object at 0x7f72946309d8>,
<PyKrita.krita.Document object at 0x7f7294630c18>]
It is a list of something, sure, but how to use it? If we go back to the Krita apidocs page and look at the function, documents() we’ll see there’s actually a clickable link on the “Document” class. If you follow that link, you’ll see that the document has a function called name() which returns the name of the document, and functions width() and height() which return the dimensions. So if we wanted to generate an info report about the documents in Krita, we could write a script like this:
from krita import *
for doc in Krita.instance().documents():
print(doc.name())
print(" "+str(doc.width())+"x"+str(doc.height()))
Iremos obter um resultado como o seguinte:
==== Atenção: Programa não gravado! ====
Sem nome
2480x3508
desenho21
3508x2480
Manhã azul
1600x900
Esperamos que isto lhe dê uma ideia de como navegar pela documentação da API agora.
A API do Krita tem muitas mais classes; podê-las-á encontrar se for à lista de classes em cima e à esquerda, ou então simplesmente carregando no nome delas para obter a a documentação da sua API. As funções print() ou dir() são suas amigas aqui também. Esta linha irá imprimir uma lista com todas as acções no Krita - poderá trocar um desses comandos em vez do “python_scripter” do exemplo acima.
[print([a.objectName(), a.text()]) for a in Krita.instance().actions()]
O módulo inspect do Python foi desenhado para este tipo de tarefas. Aqui está uma função útil para mostrar informações sobre uma classe na consola.
import inspect
def getInfo(target):
[print(item) for item in inspect.getmembers(target) if not item[0].startswith('_')]
getInfo(Krita.instance())
Finalmente, para além da documentação da LibKis, a documentação do Qt, dado que o Krita usa o PyQt para expor praticamente toda a API do Qt ao Python. Poderá criar janelas completas com botões e formulários desta forma, usando as mesmas ferramentas que o Krita está a usar! Poderá ler a documentação do Qt e a documentação do PyQt para mais informações sobre o assunto, e definitivamente estudar os “plugins” incluídos para ver como funcionam.
Detalhes Técnicos¶
Programação em Python no Windows¶
Para ter a programação em Python a funcionar no Windows 7/8/8.1, precisa de instalar o ambiente de execução Universal C Runtime na página Web da Microsoft. (O Windows 10 já a traz de raiz.)
Python 2 e 3¶
Por omissão, o Krita foi compilado para o Python 3.
Contudo, é possível compilá-lo com o Python 2. Para o fazer, terá de adicionar o seguinte à linha de configuração do cmake:
-DENABLE_PYTHON_2=ON