Kurs PHP-GTK cz.1
PHP-GTK to rozszerzenie PHP stworzone przez Andrieja Zmiewskiego pozwalające używać popularnej biblioteki GTK+ służącej do tworzenia graficznych interfejsów użytkownika na podstawie zestawu dostępnych widgetów (kontrolek). Programy korzystające z PHP-GTK wyróżniają się łatwością i szybkością napisania.
via Wikipedia
Już od dawna chciałem chociaż troszkę poznać to rozszerzenie. Trochę to potrwało zanim cokolwiek się dowiedziałem. Aktualnie sam poznaję PHP-GTK, ale mogę już opisać pewne "podstawy podstaw". Ten kurs proszę traktujcie raczej jako wolne tłumaczenie kolejnego z rozdziałów tutoriala znajdującego się na stronie projektu.
Instalacja
Aby zainstalować rozszerzenie PHP-GTK należy skompilować jego źródła. Dobry kurs na zrobienie tego pod Ubuntu (czyli pewnie też i pod Debianem) znajduje się na forum Ubuntu. Ja tylko przypomnę jak należy skompilować tą paczkę.
Źródła można pobrać stąd. Po ściągnięciu i rozpakowaniu wchodzimy do katalogu, a potem w konsoli wpisujemy:
./buildconf ./configure make sudo make install
Później pozostaje nam jedynie edycja pliku /etc/php5/cli/php.ini, a mianowicie dopisanie na końcu czegoś takiego:
extension=php_gtk2.so
Hello World
Zawsze wszystko zaczyna się od tego prostego skryptu/programu. Naszym celem będzie wyświetlenie okienka dialogowego z napisem "Hello World". Podobnie jak innym kursie przedstawię najpierw kod, a potem zajmę się jego tłumaczeniem.
<?php
if (!class_exists('gtk')) {
die("Please load the php-gtk2 module in your php.ini\r\n");
}
$wnd = new GtkWindow();
$wnd->set_title('Hello world');
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));
$lblHello = new GtkLabel("Just wanted to say\r\n'Hello world!'");
$wnd->add($lblHello);
$wnd->show_all();
Gtk::main();
?>
Jeśli pokaże nam się komunikat: Fatal error: Call to undefined function: connect_simple() to oznacza, że prawdopodobnie korzystasz z wersji GTK1. Ten kurs obejmuje jedynie GTK2, także nie masz czego tutaj szukać ;-]
Takiemu plikowi nadajemy dowolną nazwę, ale dla odróżnienia od innych, zwykłych, skryptów PHP nadajmy mu rozszerzenie *.phpw. Ważne jest aby odpalić skrypt spod konsoli poleceniem php {nazwa_pliku}. Otwierając przez przeglądarkie nie zobaczymy żadnych efektów.
Na specjalne życzenie S. wstawiam dodatkowo zrzut efektu działania tego skryptu:

Sprawdzanie czy klasa GTK istnieje
if (!class_exists('gtk')) {
die("Please load the php-gtk2 module in your php.ini\r\n");
}
Te linijki są odpowiedzialne za sprawdzenie, czy rozszerzenie PHP-GTK jest zainstalowane. Jeśli nie jest skrypt się nie wykona, ponieważ nie znajdzie klasy "gtk". Dawniej w takim wypadku stosowało się polecenie dl(), lecz w PHP 5 to polecenie posiada status "deprecated", także nie zaleca się jego stosowania.
Tworzenie głównego okna
$wnd = new GtkWindow();
Tworzenie nowego okna jest proste jak tworzenie nowego obiektu. Zmienna $wnd jest właśnie deklarowana jako obiekt.
$wnd->set_title('Hello world');
Metoda set_title sprawia, że okienko będzie miało jakiś tytuł. Wiadomo, że to akurat jest przydatne ;-)
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));
To jest bardzo ważna linijka. Bez niej po wyłączeniu skryptu główna pętla będzie się cały czas wykonywała. W tym wypadku metoda connect_simple sprawia, że po zamknięciu (a dosłownie mówiąc - po zniszczeniu) okna pętla zostanie przerwana.
Metoda connect_simple służy również do podpinania różnych zdarzeń pod odpowiednie funkcje. Przykłado dla kliknięcia buttona, który jest zdefinowany w osobnej zmiennej, skorzystanie z tej metody wyglądałoby tak:
$button->connect_simple("clicked", array($wnd, "zdarzenie"));
Po kliknięciu na ten guzik zostanie wywołana funkcja "zdarzenie". W następnych częściach postaram się lepiej przedstawić jak z czegoś takiego korzystać.
Tworzenie labela, z napisem "Hello World"
Tworzenie nowego labela (tudzież etykietki) polega na stworzeniu nowego obiektu. W naszym przykładzie jest to po prostu:
$lblHello = new GtkLabel("Just wanted to say\r\n'Hello world!'");
Jak widać nowa etykietka to nowy obiekt, a jej zawartość to paramter, który został podany podczas tworzenia obiektu.
Aby dodać (hmm dokleić) naszą etykietę należy jeszcze dopisać:
$wnd->add($lblHello);
Główne okno sprawia jeden mały problem. Jest nim mianowicie to, że można do niego "wsadzić" tylko jeden widżet. W tej części kursu tylko jeden widżet jest przyczepiany, także nie ma większych problemów, ale w późniejszych częściach widżety trzeba będzie "składować" w jakimś pojemniku. Taki pojemnik dopiero przytwierdzamy do głównego okna. Umożliwi to nam wyświetlenie kilku widżetów w głównym oknie.
Wyświetlenie okna
Póki co naszeg okno nie będzie widoczne. Aby je pokazać, należy skorzystać z metody show_all():
$wnd->show_all();
Ta metoda sprawi, że zostaną pokazane wszystkie widżety. Można również skorzystać z metody show(), ale w tym wypadku należałoby stosować ją dla każdego obiektu, ponieważ inaczej nie zostanie wyświetlony.
Po tych "zabiegach" pozostaje nam odpalenie głównej pętli Gtk::main();. Ta pętla sprawi, że nasze okno będzie się wyświetlało nawet wtedy kiedy skrypt będzie bezczynny. Normalnie (tzn, bez tej pętli) nasz skrypt by się wykonał, a okno prawdopodobnie by tylko mignęło, ponieważ po wykonaniu działania skrypt by się wyłączył, czyli nasze okno by zginęło.
Podsumowanie
W tym (bardzo) krótkim kursie przedstawiłem sposób instalacji rozszerzenia PHP-GTK, oraz bardzo podstawowego sposobu pisania skryptów z wykorzystaniem klasy "gtk". W następnym kursie postaram się coś więcej już przedstawić. Nie wiem kiedy kolejna część wyjdzie, ale powinna się ukazać.
Gdyby ktoś chciał bardziej poznać PHP-GTK to niech zajrzy sobie na anglojęzyczny kurs.
Komentarze
Disclaimer
Jakkolwiek jestem właścicielem tego bloga, nie ponoszę odpowiedzialności za kometarze napisane przez innych obywateli tego wolnego kraju.
Zastrzegam sobie prawo do kasowania/modyfikowania komentarzy (jeśli uznam to za stosowne).
#1
Jak mozna zrobic tutorial o robieniu okienek bez wklejenia zadnego screena?
S | #
#2
Wklej sobie i zobacz kod… W tym wypadku to w ogóle nie jest potrzebne
radmen | #
#3
Hmm a mnie ciekawi do czego może służyć ta klasa… Chyba nie wyświetla okienek u klienta, w przeglądarce, tylko na serwerze, czy jak?
flegmatyk | #
#4
W tym wypadku tylko na serwerze, albo dokładniej mówiąc na lokalnym hoście.
Gdybyś się pytał jaki tego cel, to wiedz, że w KateOS napisano masę aplikacji wykorzystujących właśnie PHP-GTK ;-]
radmen | #
#5
Hmm, sprawa ciekawa, a o tym z KatoOS to nie wiedziałem ;)
flegmatyk | #
#6
Cały warunek z tym if class_exists(‘gtk’) jest zbędne. To tak jakby sprawdzać np. czy jest np klasa PDO. Całkowicie niepotrzebna rzecz.
sf | #
#7
SF: o dziwo moje PHP5 nie ma PDO, a powinno mieć standardowo wbudowane. Poza tym nie każdy ma to rozszerzenie, a ten warunek sprawdzi i wywali odpowiedni komunikat zamiast ogromu błędów
radmen | #
#8
Jakiego ogromu? :) Przy pierwszej brakującej klasie napisze, że nie istnieje i tyle. Wole standardowe błędy php niż pisanie swoich ;) Jak tak bardzo chce się sprawdzać zainstalowane moduły to proponuje phpinfo() :P
sf | #
#9
SF: oki trochę się zagalopowałem. Ale IMHO to jest wygodniejsze dla szaraczka, który nie zna PHP a chce skorzystać z takiej aplikacji
radmen | #
#10
Z takim podejściem mogę się zgodzić, ale osobiście dałbym komentarz, aby to potem wywalić ;)
sf | #
#11
Hehe no już dałeś, także ktokolwiek będzie czytał komentarze to przeczyta i Twojego komenta ;]
radmen | #
#12
Kursik fajnie się zapowiada. Społeczność czeka na kolejne odsłowny ;)
pitu | #
#13
Cholera niedługo będę musioał faktycznie coś naskrobać :)
radmen | #
#14
czekamy, czekamy. ;-)
_kUtek_ | #
#15
Kurs PHP-GTK cz. 2
Już minęło sporo czasu od pojawienia się pierwszej części kursu PHP-GTK. Chciałem mocno przeprosić za to, że musieliście czekać, niestety w sporej mierze to wina mojego lenistwa...
Dzisiaj zajmiemy się czymś bardziej skomplikowanym. Stw[...]
blog radmena | #