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