|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Castellano ChineseGB Deutsch Francais Italiano Nederlands Russian Turkce Polish |
taraf�ndan Özcan Güngör <ozcangungor(at)netscape.net> Yazar hakk�nda: 1997'den beri Linux kullan�yorum.�zg�rl�k, esneklik ve a��k-kod Linux'ta en sevdi�im �zelliklerdir. ��erik: |
GTK ile Programlama�zet:
Bu makale dizisinde, GTK kullan�larak nas�l grafik kullan�c� aray�zlerinin (GUI) nas�l yaz�ld���n� ��renece�iz.Ne kadar s�rece�i hakk�nda hen�z bir fikrim yok.Bu makaleyi anlamak i�in C'de a�a��daki konular�n bilimesi gerekmektedir:
|
GTK(GIMP Toolkit-GIMP Ara� Seti), kullan�c� grafik aray�z� olu�turmaya yarayan bir k�t�phanedir.GPL lisans� alt�ndad�r.Bu k�t�phaneyi kullanarak a��k-kodlu, �cretiz veya �cretli programlar yazabilirsiniz.
GIMP ara� seti olarak tan�mlanmas�n�n nedeni, asl�nda Genel Resim D�zenleme Program� ( General Image Manipulation Program-GIMP) geli�tirmek i�in yaz�lm�� olmas�d�r.GTK'n�n ba�l�ca yazarlar�:
GTK, nesneden ba��ms�z bir uygulama programlama aray�z�d�r.C'de yaz�lm�� olmas�na ra�men, s�n�flar(class) ve geri�a��r�m (callback) fonksiyonlar� mant���n� kullan�r.
GTK programlar�n� derlemek i�in gcc komutuna GTK k�t�phanelerinin isimlerini ve yerlerini belirtmek gerekir. Bunun i�in gtk-config komutu kullan�l�r.
# gtk-config --cflags --libsbu komutun ��kt�s� (sistemden sisteme farkl�l�klar g�sterebilir):
-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 -lmBuradaki parametrelerin a��klamalar� ��yledir:
-l library: Belitirtilen yollarda libk�t�phane .a �eklinde bir ba�lay�c� arar.merhaba.c isimli bir GTK program�n� derlemek i�in a�a��daki komutu vermek yeterlidir:
gcc -o merhaba merhaba.c `gtk-config --cflags --libs`
Burada -o parametresinden sonra verilen isim derlenmi� dosyan�n ismidir.
�u anda sisteminizde GTK'n�n y�klenmi� oldu�unu varsay�yoruz.GTK'n�n son versiyonunu ftp.gtk.orgadresinden bulabilirsiniz.
�imdi ilk program�m�z� yazal�m.Bu program 200x200 piksel boyutunda bo� bir pencere olu�turur.
#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, pencere ve pencere bile�enlerini(pencere,d��me,listeler,men�ler,etiketler...) tan�mlayan de�i�kendir. Program�m�za her bir bile�en ekledi�imizde bunu GtkWidget ile tan�mlayaca��z.Burada
GtkWidget *window;void gtk_init(int *argc,char ***argv), ara� setini ba�lat�r.Komut sat�r�nda verilen parametreleri al�r.Bu fonksiyon de�i�kenler tan�mland�ktan sonra kullan�lacak ilk fonksiyondur.
GtkWidget *gtk_window_new(GtkWindowType pencere_tipi), yeni bir pencere olu�turmak i�in kullan�l�r.Pencere tipi olarak �unlar kullan�labilir:
void gtk_widget_show(GtkWidget *widget), bile�enin ekranda g�r�n�p g�r�nmesini sa�lar.Bir bile�en tan�mlan�p olu�turulduktan sonra bu fonksiyon ile g�r�nmesi sa�lan�r.
void gtk_main(void), pencereni ve bile�enlerini haz�rlar, birle�tirir ve ekranda g�sterir.Bu fonksiyon, GTK programlar�n�n sonunda mutlaka kullan�lmas� gerekir.
Pencerelerin birka� �zelli�ini kullanal�m.�rne�in pencere ba�l���n�n de�i�tirilmesi, pencere boyutunun de�i�tirilmesi...
void gtk_window_set_title(GtkWindow *window,const gchar *title), beirtilen pencerenin (window) belirtilen ba�l��� almas�n� sa�lar.Farkettiyseniz fonksiyonun ilk parametresi GtkWindow tipinde.Ancak bizim window de�i�kenimiz GtkWidget tipinde.Derleme s�ras�nda bir uyar� al�r�z.Program �al���r ama bunu d�zeltmek daha iyidir.Bunun i�in GTK_WINDOW(GtkWidget *widget) kullan�l�r.�kinci parametre olan title ise gchar tipinde.gchar glib i�inde tan�mlanm�� bir de�i�kendir ve char'dan bir fark� yoktur.
void gtk_window_set_default_size(GtkWindow *window, gint width, gint height), belirtilen pencerenin boyutunu ayarlar.�kinci parametre geni�lik, ���nc� parametre y�ksekliktir.gint yine glib i�inde tan�mlanm��t�r ve int'den fark� yoktur.
void gtk_window_set_position(GtkWindow *window, GtkWindowPosition position)
pencerenin ekrandaki yerinini belirler.position, �u de�erleri alabilir:A�a��da �rnek bir program bulunmaktadad�r:
#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); }
GTK programlar�na fare veya klavye ile m�dahalede (klavyeden bilgi girmek veya bir d��meye t�klamak gibi) bulunmak gerecektir.Bunun i�in GTK k�t�phanesinde �u fonksiyon kullan�l�r:
guint gtk_signal_connect_object(GtkObject *object,const gchar *name,GtkSignalFu nc func,GtkObject *slot_object);
object, sinyali dinelenecek bile�endir.�rne�in bir d��me bile�ine t�kland���n� anlamak i�in object, d��me olacakt�r. name , olay�n ismidir ve �u de�erleri alabilir:
func olay ger�ekle�ti�inde �a��r�lacak fonksiyonun ismidir.�imdi bir �rnek verelim:
#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); }The function
gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (close), NULL)
komutu, pencerenin kapat�lmas� s�ras�nda �al��acak ve kapat fonksiyonunu �a��racakt�r.Kapat fonksiyonu ise gtk_main_quit() fonksiyonunu �a��rarak gtk_main() fonksiyonunun sona ermesini sa�lar.B�ylece pencere kapat�ld���nda program�m�z da sona erer.Bu konuyla ilgili ayr�nt�lar daha ileriki b�l�mlerde anlat�lacakt�r.
D��mler, genelde bas�ld���nda bir i�lem ger�ekle�tirmek i�in kullan�lan bile�enlerdir.�ster web sayfalar� olsun ister grafik aray�zleri olsun, d��melerin ama�lar� budur.GTK k�t�phanesinde normal d��meler iki �ekilde olu�turulur:
Birinci fonksiyon, isimsiz, bo� bir d��me olu�turur.�kincisi ise �zerinde label yazan bir d��me olu�turur.
Burada yeni bir fonksiyon kullanaca��z:
void gtk_container_add(GtkContainer *container,GtkWidget *widget)
Bu fonksiyon ile bir bile�eni bir pencereye(daha genek olarak ta��y�c�lar) ekleme i�lemi yap�l�r.Bu �rnekte ta��y�c�, window ve bile�en d��medir.�leride ba�ka ta��y�c�lar da g�rece�iz.
D��melerde en �nemli �ey, d��meye bas�lmas�d�r.Bunu anlamak i�in yine gtk_signal_connect fonksiyonunu kullanaca��z ve bir fonksiyon �a��raca��z.Bu fonksiyon i�inde ne yap�laca��n� belirleyece�iz.
#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); }
|
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Özcan Güngör, FDL LinuxFocus.org |
�eviri bilgisi:
|
2003-04-30, generated by lfparser version 2.35