LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (122) - Gtk2 - úvod

Perl Další GUI knihovnou, kterou lze používat v Perlu je Gtk2. Tento toolkit toho již dokáže opravdu mnoho a lze s ním psát plnohodnotné aplikace. Podívejme se, jak na to.

15.12.2010 00:00 | Jiří Václavík | Články autora | přečteno 7503×

Sada knihoven GTK+ vznikla původně jako náhrada Motifu pro potřebu grafického editoru GIMP verze 1.0. Je výsledkem skupiny studentů XCF z univerzity v Berkeley z roku 1997. Z názvu Gimp také pochází zkratka GTK. Znamená totiž Gimp Tool Kit. Dnes patří GTK vedle Qt ke dvěma nejpoužívanějším toolkitům pro X11.

GTK+ je napsáno v jazyce C, avšak existují vazby na početnou skupinu známých jazyků. Pro zajímavost můžeme nahlédnout na oficiální stránku, kde je seznam podporovaných jazyků.

Gtk2 a Perl

Projekt podpory Gtk2 v Perlu má oficiální stranku na gtk2-perl.sourceforge.net. Najdeme zde dokumentaci (ta se mi ovšem nezdá příliš vhodná pro ty, kteří s Gtk2 začínají) a případně další informace.

Gtk2 by ve většině distribucí již mělo být připraveno k použití. Je třeba mít nainstalovaný modul Gtk2, což lze uskutečnit tradičním příkazem cpan.

# cpan Gtk2

Dokumentace

Kdo již Gtk2 zná (používal ji s jazykem C) a chce ho pouze používat v Perlu, může se podívat na změny mezi rozhraními. Používat původní dokumentaci zde totiž není příliš těžké. Stačí si zvyknout na několik pravidel. Velmi pěkně je udělaná také dokumentace PyGtk2, která má k perl-gtk2 ještě o něco blíže. Jak již bylo zmíněno, Existuje též oficiální POD dokumentace, avšak ta je užitečná pouze pro dohledávání syntaxe a vyžaduje již větší zkušenost Gtk2, neboť neobsahuje téměř žádné komentáře.

Gtk2 a čeština

Gtk2 bezproblémově podporuje kódování utf-8. Proto není problém vytvářet aplikace s českou diakritikou (nebo prakticky libovolnými národními znaky). Potřebujeme k tomu dvě věci.

  • uložit zdrojový kód v kódování utf-8 (to u nejpoužívanějších textových editorů obvykle nabízí přímo dialog pro uložení)
  • načíst modul utf8
    use utf8;

TRUE a FALSE hodnoty

Je vhodné využívat předdefinované pravdivostní konstanty TRUE a FALSE, které exportujeme do programu následovně.

use Glib qw(TRUE FALSE);

První program

Již tradičně začínáme u grafických knihovem programem, který zobrazí prázdné okno. Držme se této konvence dále a napišme nejjednodušší možnou grafickou aplikaci.

Již víme, že budeme v každém Gtk2 programu používat modul Gtk2.

use Gtk2;

Ve všech Gtk2 aplikacích se používá ještě jeden příkaz - init. Ten se se pokusí najít nějaký displej, kde se aplikace zobrazí (Mimo X Server nebo jiné grafické prostředí init selže; pomocí init_check můžeme zkontrolovat, zda je aktuálně takové prostředí dostupné - pokud není, může program pokračovat jinak a použít například textové rozhraní).

Gtk2->init;

Avšak místo něj lze volat use se speciálním parametrem, jak budeme často činit v budoucnu. Tím zredukujeme většinu aplikací o jeden řádek.

use Gtk2 "-init";

Program budeme ukončovat vždy vstupem do smyčky událostí. Pokaždé, když se program dostane k této smyčce, se zastaví a čeká na události, které vzápětí obsluhuje. Jakmile je obslouží, čeká na další události. To se opakuje až do ukončení programu.

Gtk2->main;

Zbývá vyřešit zobrazení okna. Okno je widget. Vytvoříme ho jako instanci Gtk2::Window. Konstruktoru předáme parametr typu Gtk2::WindowType, který může nabývat hodnot 'toplevel' nebo 'popup'. Každý widget nakonec zobrazíme pomocí metody show.

$okno = Gtk2::Window->new("toplevel");
$okno->show;

Dejme tedy dohromady všechny tyto poznatky. Náš úvodní Gtk2 program bude vypadat takto.

use Gtk2;

Gtk2->init;

$okno = Gtk2::Window->new("toplevel");
$okno->show;

Gtk2->main;

A výsledek? Po spuštění uvidíme dle očekávání prázdné okno.

První program v Gtk2 - prázdné okno

Možnosti oken

Metodou set_position nastavujeme pozici okna na displeji. Následující dva příklady budeme dále občas potřebovat.

$okno->set_position("center");
$okno->set_position("center-always");

Přidejme text

Text se vytváří ve widgetu Gtk2::Label. Užitečné je, že text lze formátovat markup jazykem. Je to podstatně přímočařejší, než používat nějaké speciální metody. Pro úpravy textu jako je velikost písma, rodina písma, styl, barvy atd. lze používat značky podobné jako v HTML.

Důležité je, že každý widget musíme přiřadit do nějakého okna metodou add (později uvidíme, že lze přiřazovat i do jiných widgetů) a nechat ho zobrazit metodou show.

use Gtk2 "-init";

$okno = Gtk2::Window->new("toplevel");
$okno->set_border_width(20);

$label = Gtk2::Label->new();
$label->set_angle(44);
$label->set_markup("<b><i>pokus</i></b> <span background='green' foreground='Yellow'
size='large'><b>pokus</b></span> <s><span size='100000'>pokus</span></s>");

$okno->add($label);
$label->show;
$okno->show;

Gtk2->main;

Jak vidíme, styl, barvy, velikost stejně jako otočení a další parametry můžeme nastavovat velmi jednoduše.

Ukázka Gtk2::Label

Přidejme tlačítko

Tlačítko je reprezentováno widgetem Gtk2::Button. Standardně tedy vytvoříme tlačítko.

$tlacitko = Gtk2::Button->new("Odeslat");

Tlačítko bychom vždy měli přiřadit nějakému oknu, kde se má zobrazit. Funguje to stejně, jako jsme to dělali u zobrazení textu. Provedeme to tedy metodou add.

$okno->add($tlacitko);

Samozřejmě nesmíme zapomenout na zobrazení tlačítka.

$tlacitko->show;

Jak tedy vypadá náš upravený program? Podívejme se na aktuální verzi zdrojového kódu.

use Gtk2;

Gtk2->init;

$okno = Gtk2::Window->new("toplevel");

$tlacitko = Gtk2::Button->new("Odeslat");

$okno->add($tlacitko);

$tlacitko->show;
$okno->show;

Gtk2->main;

Podívejme se, co se nám zobrazí po spuštění programu.

Okno s tlačítkem

Tlačítko je zde přes celé okno, což není příliš hezké. Přidejme si do okna rámeček.

$okno->set_border_width(20);

Když tento řádek připíšeme do programu, získáme okolo tlačítka kýžený rámeček.

Okno s tlačítkem

Deaktivace tlačítka

Metoda set_sensitive je přepínač pro aktivaci a deaktivaci tlačítek (nastavením na false zešednou a nepůjde na ně kliknout).

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

8.5.2016 17:19 /Redakce Linuxsoft.cz
PR: Dne 26.5.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, cloudové služby, infrastruktura cloudu, efektivní využití cloudu, možné nástrahy cloudů a jak se jim vyhnout
Přidat komentář

21.4.2016 8:01 /František Kučera
Spolek OpenAlt zve na 127. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 28. dubna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

2.3.2016 22:41 /Ondřej Čečák
Letošní ročník konference InstallFest již tento víkend!
Přidat komentář

14.2.2016 16:39 /Redakce Linuxsoft.cz
O víkendu 5. a 6. března 2016 proběhne na pražském Strahově 8. ročník tradiční konference InstallFest. Celkem za dva dny uvidíte ​30 přednášek​ a ​6 workshopů.
Přidat komentář

5.2.2016 17:38 /Petr Ježek
Utilitka z XFce "xfce4-power-manager" nejen umožňuje nastavení lhůty pro uspání či hybernaci, ale i zapínání a vypínání prezentačního módu pro nerušené sledování videí. Stačí ji nastavit v každém vybavenějším panelu a v jakémkoli nontiled WM/DE.
Přidat komentář

10.1.2016 11:32 /Pavel `Goldenfish' Kysilka
LinuxMarket změnil provozovatele. Nově jej provozuje Marek Pszczolka. Více info a detaily #1 a #2.
Přidat komentář

29.12.2015 11:38 /Ondřej Čečák
Ještě posledních pár dní můžete přidávat příspěvky nebo nápady na Install Fest 2016, který se bude konat 5. a 6. března 2016.
Přidat komentář

8.12.2015 11:36 /Petr Ježek
Logické se stává realitou. LibreOffice a Thunderbird se mají dle článku na Redditu stát protiváhou MS řešení (MS Office a Outlook).
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

10.6.2016 21:10 / pavel riha
FreeBSD 10.3 a virtualizace

8.6.2016 21:56 / Milan Gallas
Nevalidní prefix m

7.5.2016 14:58 / Teodor Komárek
Soubory

20.4.2016 0:07 / Jakub Cleing
Sázkový panel PHP FUSION

9.4.2016 9:43 / jiwopene@gmail.com
Re: problém s dpkg a nemožností instalovat

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2016) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze