[LinuxFocus-icon]
Ev  |  Eri�imd�zeni  |  ��indekiler  |  Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  Polish  

convert to palmConvert to GutenPalm
or to PalmDoc

Ozcan Gungor
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

GTK

�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:

  • De�i�kenler
  • Fonksiyonlar
  • ��aret�iler (Pointers)


_________________ _________________ _________________

 

GTK Nedir?

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.

 

Derleme

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 --libs

bu 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 -lm

Buradaki parametrelerin a��klamalar� ��yledir:

-l library: Belitirtilen yollarda libk�t�phane .a �eklinde bir ba�lay�c� arar.
-L path: �stenilen k�t�phaneyi bu yolda da arar.
-I path: Programda kullan�lan ba�l�k dosyalar�n� arayaca�� yolu belitir.

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.

 

�lk Program

�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;
ile pencere tan�mlanm��.

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);
}
 

Sinyaller ve Olaylar

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.

 

Normal D��meler

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:

  1. GtkWidget* gtk_button_new (void);
  2. GtkWidget* gtk_button_new_with_label (const gchar *label);

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);
}

 

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

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:
tr --> -- : Özcan Güngör <ozcangungor(at)netscape.net>

2003-04-30, generated by lfparser version 2.35