Publicado por: Gabriel Morrison | 18 Janeiro, 2009

Plasmoid em Python: Applet

Pessoal, nesse post vou mostrar um exemplo de um plasmoid em Python que implementa apenas o applet. Sua função é apenas mostrar um SVG. Recomendo a leitura do post anterior para melhor entendimento, além de um prévio conhecimento de Python e PyQt.

Quando criamos um plasmoid, temos que criar uma estrutura de diretórios e o arquivo metadata.desktop; esse conjunto é chamado de pacote, e é necessário para a instalação e remoção de plasmoids através da ferramenta plasmapkg. A estrutura de diretórios é a seguinte:


nomedoplugin/contents/code

O arquivo metadata.desktop vai dentro do diretório nomedoplasmoid; o código do plasmoid vai dentro do diretório nomedoplasmoid/contents/code

Segue a estrutura do metadata.desktop:

[Desktop Entry]
Encoding=UTF-8
Name=PyTiger
Name[pt_BR]=PyTiger
Type=Service
ServiceTypes=Plasma/Applet
Icon=chronometer
X-Plasma-API=python
X-Plasma-MainScript=code/main.py
X-KDE-PluginInfo-Author=Seu Nome
X-KDE-PluginInfo-Email=seuemail@provedor.com
X-KDE-PluginInfo-Name=pytiger
X-KDE-PluginInfo-Version=1.0
X-KDE-PluginInfo-Website=http://plasma.kde.org/
X-KDE-PluginInfo-Category=Examples
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-Depends=GPL
X-KDE-PluginInfo-EnabledByDefault=true

Rápida explicação sobre o arquivo acima:

  • Name: o nome do plasmoid
  • X-KDE-PluginInfo: o nome do plugin, normalmente o nome do diretório raiz do pacote do plasmoid
  • ServiceTypes: informa o tipo  do serviço; no caso um Applet
  • X-Plasma-API: informa qual scriptengine o Plasma irá usar para executar o Applet
  • X-Plasma-MainScript: informa o script principal do applet; repare que não é necessário informar o diretório contents

Agora o código (main.py):

from PyKDE4 import plasmascript
from PyKDE4.plasma import Plasma

class PyMouse(plasmascript.Applet):
    def __init__(self, parent, args=None):
        plasmascript.Applet.__init__(self, parent)

    def init(self):
        self.setHasConfigurationInterface(False)
        self.setBackgroundHints(Plasma.Applet.TranslucentBackground)
        self.svg = Plasma.Svg(self)
        self.svg.setImagePath(self.package().path() + "contents/images/tiger.svg")
        self.resize(200,200)

    def paintInterface(self, painter, option, rect):
        self.svg.resize(self.size())
        self.svg.paint(painter, 0, 0)

def CreateApplet(parent):
    return PyMouse(parent)

Todos os applets têm que herdar de plasmascript.Applet, e a diferença entre o plasmascript e o Plasma é que o Plasma é um módulo que dá acesso à biblioteca C++ libplasma; já plasmascript é um módulo que provê alguns métodos específicos do Python para que os plasmoids possam ser distribuídos pela Internet através do “Obter novidades” do diálogo “Adicionar Widgets” do Plasma. A seguir, devemos criar o método init, que é chamado pelo Plasma na inicialização do applet; pense nesse método como uma espécie de construtor. Digerindo o método init acima, temos:

  • self.setHasConfigurationInterface(False): informa ao plasma que o applet não tem interface de configuração
  • self.setBackgroundHints(Plasma.Applet.TranslucentBackground): aqui alteramos o background do applet para um background translúcido
  • self.svg.setImagePath(self.package().path() + “contents/images/tiger.svg”): aqui informamos qual SVG o objeto self.svg deve carregar; o método self.package() retorna o pacote do applet (Plasma.Package), e seu método path() retorna o caminho onde o pacote está instalado, normalmente em ~/.kde4/share/apps/plasma/plasmoids/nomedoplugin

Como nosso applet mostra um SVG, precisamos renderizá-lo na scene; para isso, criamos o método paintInterface, que recebe do Plasma um QPainter, um QStyleOptionGraphicsItem e um QRect.

No final, temos que criar a função CreateApplet, que recebe como parâmetro o pai do applet e retorna uma instância do applet.

Para instalarmos o applet, basta executar o comando:

$ plasmapkg -i nomedoplugin

E o mesmo aparecerá no diálogo “Adicionar Widgets” do Plasma. O resultado final é este:

PyTiger

PyTiger

Vocês podem fazer o download do pacote aqui.Para instalá-lo, basta usar o plasmapkg.

Terminamos por aqui, em breve, a implementação de um plasmoid completo, com applet e dataengine :)

Até mais!


Deixe uma resposta

Sua resposta:

Categorias