|
|
Ten dokument jest dost�pny w nast�puj�cych j�zykach: English Castellano ChineseGB Deutsch Francais Italiano Nederlands Russian Turkce Polish |
Özcan Güngör <ozcangungor(at)netscape.net> O Autorze: U�ywam Linux'a od 1997. Swoboda, elastyczno�� oraz otwarty kod. To s� w�a�ciwo�ci kt�re lubi�. Tlumaczenie na j�zyk polski: : Daniel Maciejewski <danielma(at)go2.pl> Zawarto��: |
Programowanie Graficznego Interfejsu U�ytkownika GUI za pomoc� GTKNotka:
W tej serii artyku��w nauczymy si� jak pisa� aplikacje z graficznym interfejsem u�ytkownika (GUI) u�ywaj�c GTK. Nie mam poj�cia jak d�uga b�dzie ta seria. �eby zrozumie� te artyku�y, musisz zna� kilka podstaw j�zyka programowania C, mianowicie:
|
GTK (GIMP Toolkit) jest bibliotek� pozwalaj�c� tworzy� interfejsy graficzne. Ta biblioteka jest dost�pna na licencji GPL. U�ywaj�c wi�c tej biblioteki mo�esz tworzy� darmowe lub komercyjne programy typu open-source.
Biblioteka ta ma nazw� GIMP toolkit (GTK) poniewa� by�a oryginalnie zaprojektowana dla rozwoju programu GIMP (General Image Manipulation Program). Autorami GTK s�:
GTK jest zorientowan� obiektowo aplikacj� interfejsu u�ytkownika. Chocia� napisana jest w C, u�ywa idei klas oraz funkcji po��czenia zwrotnego (callback functions).
�eby skompilowa� programy korzystaj�ce z GTK, musisz powiedzie� kompilatorowi gcc jakie biblioteki s� potrzebne i gdzie si� znajduj�. Te informacje mo�emy uzyska� stosuj�c komend� gtk-config.
# gtk-config --cflags --libsWyniki zwr�cone przez wykonanie tej komendy mog� by� (zale�nie od systemu) podobne do poni�szych:
-I/opt/gnome/include/gtk-1.2 -I/opt/gnome/include/glib-1.2 -I/opt/gnome/lib/glib /include -I/usr/X11R6/include -L/opt/gnome/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -l Xext -lX11 -lmOto wyja�nienia powy�szych parametr�w:
-l biblioteka: Szuka biblioteki w postaci libbiblioteka.a w zdefiniowanych �cie�kach.Aby skompilowa� program GTK o nazwie hello.c, musi by� u�yta nast�puj�ca komenda:
gcc -o hello hello.c `gtk-config --cflags --libs`
Parametr u�yty po opcji -o decyduje o nazwie, jak� b�dzie mia� skompilowany program.
Zak�adam, �e masz zainstalowane GTK w swoim systemie. Naj�wie�sz� wersj� GTK mo�esz znale�� na serwerze ftp.gtk.org.
Napiszmy nasz pierwszy program. Tworzy on puste okno o rozmiarze 200x200 pikseli.
#include <gtk/gtk.h> int main( int argc, char *argv[] ) { GtkWidget *window; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_show (window); gtk_main (); return(0); }
GtkWidget jest typem zmiennej, s�u��cym do definiowania r�nych komponent�w takich jak okno (window), przycisk (button), etykieta (label) ... W tym przyk�adzie, okno jest zdefiniowane w nast�puj�cy spos�b:
GtkWidget *window;void gtk_init(int *argc,char ***argv) s�u�y do inicjalizacji oraz pobiera parametry wpisane w linii komend. Funkcja ta musi by� u�yta po zdefiniowaniu komponent�w.
GtkWidget *gtk_window_new(GtkWindowType windowtype) tworzy nowe okno. Typem okna mo�e by�:
void gtk_widget_show(GtkWidget *widget) u�ywa si� aby komponent sta� si� widoczny w oknie.Po zdefiniowaniu komponentu oraz ustawieniu atrybut�w ta funkcja musi zosta� u�yta.
void gtk_main(void) przygotowuje okna oraz wszystkie komponenty do pojawienia si� na ekranie. Tej funkcji nale�y u�ywa� na ko�cu program�w GTK.
U�yjemy teraz pewnych w�a�ciwo�ci okna takich jak tytu�, rozmiar, pozycja ...
void gtk_window_set_title(GtkWindow *window,const gchar *title) jest u�ywana do ustawienia b�d� zmiany tytu�u okna. Pierwszy parametrem tej funkcji jest typu GtkWindow. Ale zmienna window jest typu GtkWidget. Podczas kompilacji dostaniemy ostrze�enie informuj�ce nas o tym fakcie. Chocia� skompilowany program zadzia�a, to jednak lepiej jest to poprawi�. U�ywa si� do tego GTK_WINDOW(GtkWidget *widget). Drugi parametr title (tytu�) jest typu gchar. gchar zosta� zdefiniowany w bibliotece glib tak samo jak typ char.
void gtk_window_set_default_size(GtkWindow *window, gint width, gint height) ustawia rozmiar okna window (width oznacza szeroko��, height - wysoko��). Podobnie jak gchar, r�wnie� gint jest zdefiniowane w bibliotece glib tak samo jak int.
Funkcjavoid gtk_window_set_position(GtkWindow *window, GtkWindowPosition position)
ustawia pozycj� okna window. Warto�ci� position mo�e by�:Poni�ej przedstawiony jest przyk�ad programu:
#include <gtk/gtk.h> int main( int argc, char *argv[] ) { GtkWidget *window; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),"Ýlk Program"); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window),300,300); gtk_widget_show (window); gtk_main (); return(0); }
U�ywaj�c intefejsu graficznego GUI, potrzebujesz u�ywa� myszki i klawiatury np. aby klikn�� przycisk. Dlatego u�ywa si� nast�pujacej funkcji GTK:
guint gtk_signal_connect_object(GtkObject *object,const gchar *name,GtkSignalFu nc func,GtkObject *slot_object);
object jest komponentem, od kt�rego pochodzi sygna�. Np. je�li chcesz wiedzie� czy zosta� klikni�ty button (czyli przycisk) , nasz object to w�a�nie b�dzie ten button. name jest nazw� zdarzenia i mo�e to by�:
func jest nazw� funkcji, kt�ra zostanie wywo�ana gdy wyst�pi okre�lone zdarzenie. Oto przyk�ad:
#include <gtk/gtk.h> void close( GtkWidget *widget,gpointer *data) { gtk_main_quit(); } int main( int argc,char *argv[] ) { GtkWidget *window; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (close), NULL); gtk_widget_show (window); gtk_main (); return(0); }Funkcja
gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (close), NULL)
nas�uchuje czy dla okna wyst�pi�o zdarzenie destroy (zniszcz). Gdy nast�pi wi�c pr�ba zamkni�cia okna zostanie wywo�ana funkcja close. Funkcja close wywo�uje funkcj� gtk_main_quit() i program ko�czy dzia�anie.Szczeg�y na temat sygna��w i zdarze� zostan� wyja�nione p�niej...
Normalne przyciski s� zwykle u�ywane do robienia pewnych rzeczy, gdy zostan� klikni�te. W bibliotece GTK s� dwa sposoby tworzenia przycisk�w:
Pierwsza funkcja tworzy przycisk bez etykiety (tzn.nic nie jest napisane na przycisku). Druga natomiast tworzy przycisk z etykiet� (label), kt�ra jest napisana na przycisku.
Teraz u�yjemy nowej funkcji:
void gtk_container_add(GtkContainer *container,GtkWidget *widget)
U�ycie tej funkcji umo�liwia stworzenie przycisku (og�lnie rzecz bior�c ka�dego komponentu) kt�ry pojawi si� w oknie (generalnie w kontenerze). W kolejnym przyk�adzie kontenerem jest okno (window), a komponentem, kt�ry zostanie dodany jest przycisk (button). O innych kontenerach dowiesz si� p�niej.
Najwa�niejsz� rzecz� jak� trzeba wiedzie� o przycisku jest to czy zosta� on klikni�ty czy nie. Znowu do tego celu u�ywa si� funkcji gtk_signal_connect. Dzi�ki tej funkcji inna funkcja zostanie wywo�ana i w ten spos�b "za przyciskiem" zostanie ukryta pewna funkcjonalno��. Oto przyk�ad:
#include <gtk/gtk.h> void close( GtkWidget *widget,gpointer *data) { gtk_main_quit(); } void clicked(GtkWidget *widget,gpointer *data) { g_print("Button Clicked\n"); } int main( int argc,char *argv[] ) { GtkWidget *window,*button; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (close), NULL); button=gtk_button_new_with_label("Button"); gtk_container_add(GTK_CONTAINER(window),button); gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(clicked),NULL); gtk_widget_show(button); gtk_widget_show(window); gtk_main (); return(0); }
|
Strona prowadzona przez redakcj� LinuxFocus
© Özcan Güngör, FDL LinuxFocus.org |
t�umaczenie:
|
2004-01-21, generated by lfparser version 2.45