LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> Perl (123) - Gtk2 - základní práce s obrázky

Perl V druhém dílu série o Gtk2 budeme vkládat ikony do různých widgetů, avšak podíváme se též na obrázky obecně.

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

Tlačítko ze stocku

Obyčejné tlačítko již vytvořit umíme. Stock je množina speciálních standardizovaných tlačítek. Jsou to tedy šablony, pomocí kterých můžeme tvořit tlačítka do našich aplikací. To v tomto případě znamená, že se zobrazí v tlačítku ještě nějaká ikona z používaného prostředí (například červený křížek pro tlačítko Zrušit apod.).

Seznam šablon pro tlačítka nalezneme v poli Gtk2::Stock->list_ids. Podívejme se na pár úvodních hodnot.

gtk-zoom-out
gtk-zoom-in
gtk-zoom-fit
gtk-zoom-100
gtk-yes
gtk-unindent
gtk-undo
gtk-underline
gtk-undelete
gtk-strikethrough
...

Abychom přesně věděli, o čem je řeč, podívejme se, jak jednotlivá stock tlačítka vypadají.

Stock tlačítka

Tato stock tlačítka se vytvářejí pomocí speciálního konstruktoru new_from_stock widgetu Gtk2::Button. Tomu předáváme vždy některý z řetězců z předchozího seznamu. Podívejme se, jak vytvoříme tlačítko Ano (na obrázku první sloupec, pátý řádek).

my $ano = Gtk2::Button->new_from_stock("gtk-yes");

Nyní s tímto tlačítkem již manipulujeme stejně jako s běžným tlačítkem.

Vlastní stock tlačítko

Poznamenejme, že do stocku lze definovat vlastní tlačítka. Ukažme si, jak se to provede. Základem je metoda add, kterou voláme nad třídou Gtk2::Stock.

Gtk2::Stock->add ({
     stock_id => "moje-vlastni-tlacitko",
     label    => "_Ahoj",
     keyval   => $Gtk2::Gdk::Keysyms{A},
});

Nyní se v seznamu Gtk2::Stock->list_ids objeví též moje-vlastni-tlacitko a můžeme s ním pracovat stejně jako s ostatními. Jinými slovy, můžeme nyní tlačítkovému konstruktoru new_from_stock předávat řetězec moje-vlastni-tlacitko.

Avšak v tuto chvíli nemáme u tlačítka žádnou ikonu. Zde nestačí přiřadit soubor, ale je to trochu složitější. Pro přiřazení ikony ze souboru ./ikona.png je třeba vykonat následující posloupnost příkazů.

$icon_factory = Gtk2::IconFactory->new;
$icon_factory->add("moje-vlastni-tlacitko", Gtk2::IconSet->new_from_pixbuf(
Gtk2::Gdk::Pixbuf->new_from_file("./ikona.png")));
$icon_factory->add_default;

Titulek okna a rohová ikona

Přidejme někam do našeho programu následující řádky. Máme-li v aktuálním adresáři nějaký obrázek v souboru ikona.png, uvidíme, že kód ovlivní hlavní lištu okna.

$okno->set_title("okno s ikonou :-)");
$okno->set_icon_from_file("./ikona.png");

Ikonu bychom neměli zapomenout nastavit u žádné aplikace, která půjde k uživatelům, protože taková věc je schopna udělat dobrý dojem.

Titulek okna s ikonou

Tlačítko s vlastním obrázkem

Pokud si nevybereme některé z přednastavených tlačítek a nechceme oklikou vytvářet nové stock tlačítko (protože chceme tlačítko použít jen jednorázově), můžeme vytvořit vlastní. To je podstatně jednodušší a obnáší to pouze vytvoření objektu obrázku a přiřazení ho tlačítku.

$tlacitko = Gtk2::Button->new("Klikni");
$obrazek = Gtk2::Image->new_from_file("./Ghost.png");
$tlacitko->set_property("image"=>$obrazek);

Poznamenejme, že pro čistě obrázková tlačítka samozřejmě stačí vynechat textový popisek a použít samotný obrázek.

Tlačítko s obrázkem

Práce s obrázky - zobrazování, škálování, ořezávání

Nejprve se podívejme na úplně nejzákaldnější věc - zobrazíme v okně obrázek ze souboru v aktuálním adresáři.

Vytvoříme tedy nejprve objekt $obrazek a ten (jakožto widget) standardně zobrazíme (například přidáme do okna). Zobrazování obrázků je základní funkcí grafické knihovny a proto to ani nemůže být něco náročného na psaní kódu.

$obrazek = Gtk2::Image->new_from_file("./obrazek.png");
$okno->add($obrazek);

Podívejme se ještě, jak z obrázku vytvořit buffer pixelů. Občas se to může hodit, jak uvidíme dále.

$raw = `cat ./obrazek.png`;
$pixbufloader = Gtk2::Gdk::PixbufLoader->new;
$pixbufloader->write($raw);
$pixbufloader->close; 
$pixbuf = $pixbufloader->get_pixbuf;

Odtud můžeme samozřejmě jít zase zpátky a vytvořit znovu Gtk2::Image.

$obrazek = Gtk2::Image->new_from_pixbuf($pixbuf);   

PixBuf můžeme škálovat. Pro změnu rozměrů obrázku na 500x500 metodou bilinear vyzkoušejme tento příkaz. Další metody škálování jsou v dokumentaci, avšak pro běžné účely vůbec nezáleží na tom, které škálování se provede.

$pixbuf = $pixbuf->scale_simple(500, 500, "bilinear") ;

Na závěr vyřízneme z obrázku kousek o velikosti 50x50, jehož horní levý roh má souřadnice 10, 10.

$pixbuf = $pixbuf->new_subpixbuf(10, 10, 50, 50); 

Změna kurzoru

Ještě neumíme pracovat s událostmi, avšak předběhněme trochu a podívejme se, jak lze měnit kurzorovou ikonu.

Signál enter se emituje po najetí myši na daný widget (hned zmiňme, že existuje též signál leave, který vyvolá tentokrát opuštění prostoru kurzorem myši). Zkusme po najetí do prostoru tlačítka změnit kurzor a nastavit ho na nějakou z hodnot typu Gtk2::Gdk::CursorType. Kurzor je objektem typu Gtk2::Gdk::Cursor a podle toho s ním také budeme zacházet. Nejprve ho vytvoříme a poté nastavíme.

$tlacitko = Gtk2::Button->new("1");
$tlacitko->signal_connect("enter" => sub {
    $tlacitko->window->set_cursor(Gtk2::Gdk::Cursor->new("man"));
});

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

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

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?

Více ...

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