Knihovna PHP-GTK |
Skriptovacφ jazyk PHP se pou₧φvß na serveru ke generovßnφ dynamick²ch HTML strßnek. PodobnΘ tvrzenφ si m∙₧ete p°eΦφst tΘm∞° v ka₧dΘ knize nebo Φlßnku, kter² se PHP zab²vß. Mßlokdo vÜak vφ, ₧e ho lze s pomocφ knihovny PHP-GTK pou₧φt i k programovßnφ klasick²ch grafick²ch aplikacφ ve Windows i v Unixu.
Binßrnφ verze 0.52 pro Windows
ZdrojovΘ k≤dy verze 0.52
Oficißlnφ referenΦnφ p°φruΦka
http://gtk.php.net
demoverze | Win.9x/Me, Win.2k,.Win.XP | 9,2.MB | anglicky | 2000 KΦ
Knihovna GTK+ p∙vodn∞ vznikla pro
grafick² editor Gimp. Jejφ obliba rychle rostla a pozd∞ji se stala zßkladem
GNU desktopovΘho prost°edφ Gnome. Pojem GTK nenφ tedy ve sv∞t∞ Linuxu neznßm²,
ale existuje takΘ verze knihovny pro Windows. PHP-GTK potom rozÜi°uje jazyk
PHP o mo₧nost vytvß°enφ grafick²ch GTK aplikacφ, kterΘ nijak nevyu₧φvajφ webov²
server a jsou relativn∞ dob°e p°enositelnΘ mezi r∙zn²mi operaΦnφmi systΘmy.
V²sledn² program b∞₧φ na vaÜem poΦφtaΦi podobn∞ jako Word nebo Mozilla, (spustφ
se nap°. p°φkazem php skritp.php
.
Vzhled okna ve Windows
|
Vzhled okna v Linuxu
|
P°ed instalacφ v Linuxu se ujist∞te, ₧e mßte nainstalovanou CGI verzi PHP (alespo≥ ve 4. verzi) a knihovnu GTK (verzi 1.26).
Trochu zklaman∞ musφme °φci, ₧e na rozdφl od Linuxu jste ve Windows uÜet°eni mnoha problΘm∙. Na domovskΘ strßnce nebo na CD najdete p°edkompilovanou aktußlnφ verzi (momentßln∞ 0.5.2), kterß obsahuje vÜe pot°ebnΘ, vΦetn∞ n∞kolika ukßzkov²ch skript∙, kter²mi m∙₧ete otestovat, jestli vÜechno funguje tak, jak mß.
V n∞kter²ch distribucφch Linuxu m∙₧ete zkusit nainstalovat existujφcφ RPM balφky, ale p°ipravte se na hotovΘ orgie zßvislostφ a kolizφ (testovßno na RedHat 7.3 a Mandrake 8.1). My jsme to po 20 minutßch vzdal, proto₧e se instalace zaΦala podez°ele podobat tvorb∞ novΘ distribuce, a vyzkouÜeli zdrojovΘ k≤dy. Situace vÜak nebyla o moc lepÜφ, ale vÜechny chyby si u₧ ani nepamatujeme (z mailing listu jseme zjistili, ₧e nejsme sami, kdo mß s kompilacφ problΘmy). Nakonec jsme bez problΘm∙ nainstalovali starÜφ verzi 0.5 klasick²m zp∙sobem:
./configure make make install
Drobn² zßdrhel p°edstavuje naÜe mate°Ütina, tedy jejφ diakritickß Φßst. PHP-GTK vnit°n∞ pou₧φvß pro k≤dovßnφ °et∞zc∙ Unicode, co₧ na v∞tÜin∞ systΘm∙ zp∙sobφ problΘmy se zobrazovßnφm n∞kter²ch znak∙.
S tφm se m∙₧ete vypo°ßdat n∞kter²m z nßsledujφcφch zp∙sob∙:
Zßkladnφ principy tvorby programu s PHP-GTK jsme se rozhodli ukßzat na jednoduchΘm programu, jeho₧ jedinou funkcφ je vytvo°enφ zßstupce internetovΘ adresy URL na pracovnφ ploÜe Windows. Jde v podstat∞ o obyΦejn² textov² soubor s p°φponou .url. Soubor m∙₧e vypadat t°eba takto:
[DEFAULT] BASEURL=http://www.google.com/ [InternetShortcut] URL=http://www.google.com/ Modified=E086A4673499C20101
Poslednφ °ßdek nenφ nutn². Program si od u₧ivatele vy₧ßdß cφlov² adresß°, jmΘno souboru a URL adresu. V²sledn² program tedy nebude p°enositeln², respektive fungovat bude vÜude, ale v²sledek vßm bude jinde ne₧ ve Windows naprosto k niΦemu. ┌prava pro Linux vÜak nenφ slo₧itß û jde jen o to, rozeznat operaΦnφ systΘm a podle n∞j zapsat data v po₧adovanΘm formßtu do souboru. Musφte ale pamatovat na to, ₧e ne ka₧d² desktop pracuje se stejn²m formßtem souboru, navφc nap°. KDE mß tuto funkci integrovanou. Hotov² skript je zde.
<?php if (!class_exists('gtk')) { if (strtoupper(substr(PHP_OS, 0,3) == 'WIN')) dl('php_gtk.dll'); else dl('php_gtk.so'); }
Takto by m∞l zaΦφnat ka₧d² skript, kter² si chce d∞lat jakΘkoliv ambice na p°enositelnost. Prvnφ podmφnka zkouÜφ, jestli u₧ je knihovna PHP-GTK zavedena v pam∞ti a pokud ne, druhß podmφnka zavede podle operaΦnφho systΘmu sprßvnou verzi knihovny. Nßsledujφ definice funkcφ.
function delete_event() { return false; }
Funkce delete_event
se zaregistruje jako obslu₧nß rutina (handler) pro signßl delete-event
, kterß je vyvolßna v okam₧iku, kdy systΘm nebo window mana₧er poÜle po₧adavek k odstran∞nφ n∞kterΘho widgetu. Signßl zavolß metodu destroy()
, kterß zruÜφ objekt a uvolnφ pam∞¥. Typicky se s nφ m∙₧ete setkat v okam₧iku, kdy kliknete na ikonu pro uzav°enφ okna v titulkovΘm pruhu. Pokud zm∞nφte nßvratovou hodnotu funkce na true
, nep∙jde okno standardnφm zp∙sobem uzav°φt. Toho m∙₧ete vyu₧φt pro vyvolßnφ potvrzovacφho dialogu, ve kterΘm se ptßte, zda chce u₧ivatel opravdu skonΦit.
function destroy() { gtk::main_quit(); }
Zde, uvnit° funkce destroy()
, volßme statickou funkci pro ukonΦenφ programu. Pokud ji nepou₧ijete a ukonΦφte program, okno sice zmizφ z obrazovky, ale v pam∞ti z∙stane.
function create_shortcut() { global $dir_entry, $name_entry, $adr_entry; $filename = $dir_entry->get_text().$name_entry->get_text(); $file = fopen($filename, "w") or die("\nSoubor nelze vytvorit!\n"); fputs($file, "[DEFAULT]\nBASEURL=".$adr_entry->get_text()."\n"); fputs($file, "[InternetShortcut]\nURL=".$adr_entry->get_text()."\n"); fclose($file) or die("Soubor nelze uzavrit!"); $name_entry->set_text(".url"); $name_entry->set_position(0); $adr_entry->set_text("http://"); }
Toto je funkce, kterß vytvo°φ zmφn∞nΘho zßstupce. Mimo standardnφ funkce PHP pro prßci se soubory obsahuje volßnφ t°φ r∙zn²ch metod objektu GtkEntry
:
get_text()
- vrßtφ obsah textovΘho polφΦkaset_text()
- nastavφ implicitnφ text v textovΘm poliset_position()
- nastavφ kurzor na pozici znaku danou hodnotou parametru. 0 nastavφ kurzor na zaΦßtek, -1 na konec (implicitnφ).A nynφ u₧ m∙₧eme vytvß°et samotnΘ grafickΘ rozhranφ programu. ZaΦneme hlavnφm oknem.
$window = &new GtkWindow(); $window->connect("destroy","destroy"); $window->connect("delete_event","delete_event"); $window->set_usize(350, 150); $window->set_title("Novy zastupce URL"); $window->set_border_width(4); $window->set_position(GTK_WIN_POS_CENTER); $table = &new GtkTable(4, 2); $window->add($table);
Jak vidφte nenφ to nic slo₧itΘho. Na prvnφm °ßdku volßme konstruktor t°φdy GtkWindow
, Φφm₧ vytvo°φme novou instanci objektu. Nßsleduje dvojφ volßnφ metody connect()
, kterß k signßl∙m p°ipojuje v²Üe definovanΘ obslu₧nΘ rutiny: delete_event
zav°e okno a destroy definitivn∞ ukonΦφ program. ZbylΘ Φty°i metody objektu $window
nastavujφ jeho vlastnosti: rozm∞ry, titulek, Üφ°ku okraje a poΦßteΦnφ umφst∞nφ na obrazovce pomocφ v²ΦtovΘ konstanty. Tyto konstanty mß k dispozici mnoho widget∙ a jejich pomocφ lze snadno zm∞nit °adu vlastnostφ. NejlepÜφ bude, kdy₧ se podφvßte do manußlu.
P°edposlednφ °ßdek ·ryvku vytvß°φ objekt GtkTable
. GtkTable
slou₧φ k rozmφst∞nφ dalÜφch prvk∙ v rodiΦovskΘm okn∞ a jeho parametry vyjad°ujφ
poΦet °ßdk∙ a sloupc∙ tabulky. Do jednotliv²ch bun∞k se potom umφs¥ujφ dce°inΘ
prvky. Pokud vytvß°φte jenom jednoduch² program, m∙₧ete zvß₧it, jestli si nevystaΦφte
s prvky GtkVBox
a GtkHBox
, jejich₧ pou₧itφ je jednoduÜÜφ,
ale v²sledn² efekt nemusφ b²t v∞tÜinou tak p∞kn².
A na poslednφm °ßdku p°idßme objekt $table
do hlavnφho okna. Tφm jsme p°ipravili kostru programu a te∩ je nutno p°idat popisky, textovß pole apod.
$dir_label = &new GtkLabel("Adresar"); //a p°ipojφme popisek do levΘho hornφho rohu (0 zleva, 1 z prava, 0 se shora, 1 ze zdola) $table->attach($dir_label, 0, 1, 0, 1); $name_label = &new GtkLabel("Jmeno"); $table->attach($name_label, 0, 1, 1, 2); $adr_label = &new GtkLabel("URL adresa"); $table->attach($adr_label, 0, 1, 2, 3);
B∞₧nΘ textovΘ popisky se vytvß°φ pomocφ t°φdy GtkLabel
. Parametr, kter² p°ijφmß konstruktor, je textov² °et∞zec, kter² se mß zobrazit. Ihned po vytvo°enφ p°idßme popisek do tabulky $table
. K tomu pou₧ijeme metodu attach()
, kde prvnφ parametr je jmΘno p°idßvanΘho prvku a nßsledujφcφ Φty°i Φφsla udßvajφ pozici prvku v tabulce (Φφslovßno od nuly).
$dir_entry = &new GtkEntry(); $dir_entry->set_text("C:\\Documents and Settings\\petr\\Plocha\\"); $table->attach($dir_entry, 1, 2, 0, 1); $name_entry = &new GtkEntry(); $name_entry->set_text(".url"); $name_entry->set_position(0); $table->attach($name_entry, 1, 2, 1, 2); $adr_entry = &new GtkEntry(); $adr_entry->set_text("http://"); $table->attach($adr_entry, 1, 2, 2, 3);
Stejn²m zp∙sobem vytvo°φme textovß pole, jen mφsto t°φdy GtkLabel
pou₧ijeme t°φdu GtkEntry
. Navφc vÜak pou₧ijeme v²Üe zmφn∞nΘ metody pro nastavenφ implicitnφho textu a umφst∞nφ kurzoru.
$button = &new GtkButton("Vytvorit!"); $button->connect("clicked", "create_shortcut"); $table->attach($button, 0, 2, 3, 4);
TlaΦφtka se tvo°φ pomocφ t°φdy GtkButton
. Vytvo°φ se a do okna
umφstφ stejn∞ jako p°edchozφ prvky. Od tlaΦφtka vÜak oΦekßvßme n∞jakou Φinnost,
proto k n∞mu musφme jeÜt∞ p°ipojit signßl, na kter² bude reagovat, a handler,
kter² signßl zpracuje. V naÜem p°φpad∞ to bude prßv∞ signßl clicked
,
kter² zavolß funkci create_shortcut
.
$tip = &new GtkTooltips(); $tip->set_delay(200); $tip->set_tip($button, "Vytvori zastupce URL");
Drobnou, ale p°φjemnou u₧iteΦnostφ je nßpov∞da v podob∞ plovoucφch tip∙. Po vytvo°enφ instance t°φdy GtkTooltips
nastavφme dobu v milisekundßch, po kterΘ se mß nßpov∞da zobrazit, kdy₧ ponechßme kurzor myÜφ nad widgetem s nßpov∞dou. Potom dßme na v∞domφ, ₧e se nßpov∞da vztahuje ke tlaΦφtku $button
.
$window->set_focus($name_entry); $window->show_all();
Pomalu jsme se p°iblφ₧ili ke konci programu. Metodou set_focus()
urΦφme, ₧e aktivnφm prvkem bude implicitn∞ textovΘ pole $name_entry
û u₧ivatel tak m∙₧e rovnou zadat jmΘno souboru.
VÜe, co jsme zatφm ud∞lali, vÜak existuje jenom n∞kde v pam∞ti, ale na obrazovce by se po spuÜt∞nφ nic nezobrazilo. Proto zavolßnφm
$window->show_all(); gtk::main(); ?>
zobrazφme okno a vÜechny p°ipojenΘ prvky a ·pln∞ nakonec spustφme hlavnφ smyΦku programu.
VÜechny uvedenΘ programy a mnoho dalÜφch je voln∞ ke sta₧enφ na domovskΘ strßnce knihovny PHP-GTK.
IP
Look-up Number
Converter PHP
Header Grabber |
Porg
|
Pokud jste doΦetli a₧ jsme a vyzkouÜeli si vlastnoruΦn∞ a ·sp∞Ün∞ napsat n∞jak² program, pak vßm gratulujeme. Asi jste pochopili, ₧e s knihovnou PHP-GTK nemß smysl pouÜt∞t se do n∞jak²ch velk²ch program∙, ale p°i psanφ drobn²ch utilit m∙₧e b²t jejφ pou₧itφ jednoduÜÜφ, ne₧ psßt k≤d t°eba v C++. Na domovskΘ strßnce i zde na CD naleznete n∞kolik p°φklad∙ r∙znΘ slo₧itosti, kter²mi se m∙₧ete inspirovat.