LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> 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 9879×

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ů

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

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

> Poslední diskuze

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:04 / Jan Ober
Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:00 / Jan Ober
Re: Gimp

Více ...

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