Hlavní navigace

KDE 4: jak funguje plasmoid

Adam Štrauch

Tento týden ještě u tématu KDE chvíli zůstaneme. Podíváme se na vytváření plasmoidů. Ty jsme v úterním článku označili za hnací sílu KDE 4, takže je takovou povinností nahlédnout plasmoidům pod kapotu. Ukážeme si, jak vytvořit jednoduchý plasmoid a napojit ho na čím dál více oblíbený Twitter.

Co je to plasmoid

Jak již bylo v úterý řečeno, prostředí KDE je postaveno převážně na tzv. Plasmě. Tedy aspoň ta část, na kterou se díváme, a která je u prostředí to co zaujme na první pohled. Plasma v jednom programu kombinuje vlastnosti Kickeru (hlavního panelu), plochy a SuperKaramby (malé prográmky umístěně na plochu nebo do panelu). Poslední zmíněnou vlastnost tu budeme dnes prezentovat a takový malý prográmek si vytvoříme v Pythonu. Vývojáři tyto prográmky nazývají plasmoidy.

Plasmoidů je dnes již celá řada, nicméně pokud nás Plasma zaujme a budeme podle ní chtít upravit svoje zvyklosti, může se schopnost naprogramovat si vlastní plasmoid hodit. Nejlepším zdrojem na plasmoidy je kde-look.org. Najdeme jich tam přibližně stovku.

V čem můžeme plasmoid naprogramovat

Podle oficiálního how-to máme tři možnosti jak vytvořit plasmoid. Jsou to C++, Python a Ruby. Python je mému srdci nejblíže, takže použijeme na vytvoření plasmoidu právě jeho. Všechno, co jde udělat v Pythonu, lze samozřejmě více či méně obtížně udělat i ve zbylých dvou. Jedna z dalších možností je použití HTML a JavaScriptu.

Pro vytvoření plasmoidu v Pythonu budeme potřebovat tyto dva moduly:

  • PyQt4
  • pykde4

Máme-li připravené prostředí, je čas vytáhnout náš oblíbený editor a začít psát plasmoid.

Hallo Plasma

Rozložení adresářů

Než začneme vytvářet náš první „Hello World“ plasmoid, řekneme si něco o tom, kde a jak jsou uloženy zdrojové kódy, případně další soubory. U plasmoidů musíme držet pevnou adresářovou strukturu, aby KDE mohlo plasmoid správně zpracovat. U našeho plasmoidu „Hello Plasma“ budou soubory v následujícím stromu:

hello-plasma/install.sh
hello-plasma/metadata.desktop
hello-plasma/contents/
hello-plasma/contents/code/
hello-plasma/contents/code/main.py 

Adresář contents obsahuje všechno, co bude umístěno na plasmoidu a také samotný zdrojový kód. Ten se ukládá do jeho podadresáře code. Soubor metadata.desktop obsahuje informace o plasmoidu, viz níže. A nakonec main.py. Tento skript se začne vykonávat jako první a může naimportovat další .py soubory ve stejném adresáři. Jeho název je možné nadefinovat v metadata.desktop.

Kód

Než začneme se samotným programováním, musíme do souboru metadata.desktop napsat informace o tom, co je náš plasmoid zač.

[Desktop Entry]
Encoding=UTF-8
Name=Hello Plasma
Name[nl]=Hallo Plasma
Type=Service
ServiceTypes=Plasma/Applet
Icon=oxygen
X-Plasma-API=python
X-Plasma-MainScript=code/main.py
X-KDE-PluginInfo-Author=Root.cz
X-KDE-PluginInfo-Email=redakce@iinfo.cz
X-KDE-PluginInfo-Name=hello-plasma
X-KDE-PluginInfo-Version=1.0
X-KDE-PluginInfo-Website=http://root.cz/
X-KDE-PluginInfo-Category=Examples
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true 

Názvy položek jsou podle mě dostatečně výmluvné, takže se jimi nebudu blíže zabývat.

Další soubor, který budeme potřebovat, je samotný zdrojový kód.

#!/usr/bin/python
# -*- coding: utf-8 -*-

from PyQt4.Qt import *
from PyQt4.QtGui import *
from PyKDE4.plasma import Plasma
from PyKDE4.kdecore import KGlobal
from PyKDE4 import plasmascript

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

    def init(self):
        self.setHasConfigurationInterface(False)
        self.resize(125, 125)
        self.setAspectRatioMode(Plasma.Square)

    def paintInterface(self, painter, option, rect):
        painter.setPen(Plasma.Theme.defaultTheme().color(Plasma.Theme.TextColor))
        painter.save()
        painter.drawText(rect, Qt.AlignCenter, "Hallo applet")
        painter.restore()

def CreateApplet(parent):
    return PyTestApplet(parent) 

Nejdříve naimportujeme potřebné knihovny. Poté vytvoříme třídu s naším plasmoidem a do ní umístíme metody init(), init() a paintInterface(). V init() zavoláme init() metodu zděděné třídy. Pokud možno sem již další kód nepřidáváme a místo toho použijeme metodu init(). Metoda paintInterface() se volá při potřebě vykreslit plasmoid.

První věc co se spustí při provádění kódu je funkce CreateApplet(). Ta vrátí adresu na PyTestApplet(), se kterým Plasma dále pracuje. Při vytvoření plasmoidu zavolá Plasma metodu init(). To je místo, kde nastavíme třeba velikost nebo poměr stran jako u příkladu. V metodě paintInterface() voláme pouze metody, které souvisejí s překreslováním plasmoidu. Na plochu plasmoidu můžeme kreslit jako v kterékoli jiné Qt aplikaci a samozřejmě můžeme používat i další prvky, které knihovna Qt obsahuje.

Instalace

Pro instalaci si můžeme vytvořit třeba instalační skriptík, který rovnou ukáže výsledek. Mohl by vypadat třeba takto:

#!/bin/sh

zip -r ../hello-plasma.zip .
cd ..
plasmapkg -r hello-plasma
plasmapkg -i hello-plasma.zip
plasmoidviewer hello-plasma 

Plasmoidy se zabalují do zip balíků a instalovat je můžeme pomocí plasmapkg. Pro prohlížení plasmoidů se používá program plasmoidviewer. Při spouštění skriptu si musíme dát pozor, abychom byli v adresáři s plasmoidem. S dalších parametrů plasmapkg zmíním -l, který umí vypsat seznam nainstalovaných plasmoidů.

hallo-plasma

Hallo Twitter

Jako další příklad uvedu zobrazení posledních několika twittů z Twitteru. Tento komunikační kanál se v okolí redakce stal za poslední týden velmi populární, takže je na místě použít právě jej.

Layout

Stejně jako u normálních aplikací, také u plasmoidu můžeme použít tzv. layouty. Díky nim lze jednoduše rozprostřít jednotlivé prvky formuláře nebo grafiky po plasmoidu. Jedná se víceméně o objekt, který může na sobě vykreslit další objekty a vždy je dá do nastavené pozice. Např. vertikální layout bude dávat prvky pod sebe a horizontální vedle sebe.

Kód

#!/usr/bin/python
# -*- coding: utf-8 -*-

import twitter
from PyQt4.Qt import *
from PyQt4.QtGui import *
from PyKDE4.plasma import Plasma
from PyKDE4.kdecore import KGlobal
from PyKDE4 import plasmascript

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

    def init(self):
        self.setHasConfigurationInterface(False)
        self.setAspectRatioMode(Plasma.Square)
        self.resize(300, 300)

        api = twitter.Api()
        statuses = api.GetUserTimeline("rootcz")

        self.layout = QGraphicsLinearLayout(Qt.Vertical, self.applet)

        for x in [s.text for s in statuses][0:3]:
            label = Plasma.Label(self.applet)
            label.setText(x)
            self.layout.addItem(label)

        self.setLayout(self.layout)

def CreateApplet(parent):
    return PyTestApplet(parent) 

Tato upravená verze prvního příkladu neobsahuje metody paintInterface() a pouze vkládá poslední tři twitty do layoutu. Pro komunikaci s Twitterem použijeme modul python-twitter. Pomocí něj se můžeme spojit se serverem a díky jednoduchému API provádět veškerou činnost jako v jiných klientech či na webu. Hned poté si vytvoříme náš layout a řekneme mu, že má prvky sázet pod sebe. V cyklu pak projedeme poslední tři twitty, ke každému vytvoříme objekt QLabel a umístíme ho do layoutu. Bohužel zde zatím neexistuje cesta, jak si plasmoid jednoduše „naklikat“ pomocí Qt designéru, musíme na něj veškeré prvky nasázet ručně ve zdrojovém kódu.

hallo-twitter

Závěr

Programování plasmoidů se zas o tolik neliší oproti programování jiných KDE/Qt aplikací. Víceméně se stačí držet pouze určitého způsobu ukládání zdrojového kódu a správně pracovat s init metodami. O plasmoidech budeme pokračovat ještě jedním článkem, kde si ukážeme vytvoření kompletního plasmoidu s grafickými prvky, SVG obrázky a hlavně s DataEnginy. Dokončíme také našeho klienta.

Článek vychází z tutoriálů na stránkách techbase.kde.org.

Našli jste v článku chybu?

30. 1. 2009 9:07

Jarque (neregistrovaný)
Serwaaa lidkovia,
pozrite sa, takéto články sú tu za účelom priblíženia problematiky.
Nikde nepíše autor pomôžeme pri vývoji KDE a naprogramujeme best-of-best plasmoid,
je to len ukážka ako sa to principiálne robí, možno jedného z nás to nakopne a povie si tak ja sa idem na to pozrieť hlbšie.


30. 1. 2009 9:53

Lojza (neregistrovaný)
Nechci vám bourat váš zoufale omezený svět, ale Python je tady minimálně od roku 1991. Takže je o 4 roky starší než Java. :-D
DigiZone.cz: Flix TV startuje i na Slovensku

Flix TV startuje i na Slovensku

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

DigiZone.cz: „Black Friday 2016“: závěrečné zhodnocení

„Black Friday 2016“: závěrečné zhodnocení

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák