[LinuxFocus-icon]
<--  | Ana Sayfa  | 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  

Ozcan Gungor
�zcan G�NG�R
<ozcangungor(at)netscape.net>

Yazar hakk�nda:
Askerli�imi Linux, Oracle y�neticisi ve web programc�s� olarak yapmaktay�m.
��erik:

 

GTK ile GUI Programlama

GTK

�zet:

Bu makale dizisinde, grafiksel kullan�c� aray�zlerini GTK ile nas�l yazabilece�imizi ��renece�iz. Bu dizinin ne kadar s�rece�ini hakk�nda fikrim yok. Bu dizinin anla��labilmesi i�in C dili hakk�nda a�a��daki konular�n bilinmesi gerekmektedir:

  • De�i�kenler
  • Fonksiyonlar
  • ��aret�iler (Pointer)
�nceki say�lar�n okunmas� da �nerilir:

Askeli�imi yapt���m i�in bu makale birazc�k k�sa.

_________________ _________________ _________________

 

Toggle D��meleri

Bu d��me normal bir d��me olarak g�r�nmektedir ancak iki durumu vard�r: Bas�l� ya da de�il. Bir toggle d��mesi olu�turmak i�in a�a��daki fonksiyon kullan�l�r :

GtkWidget *toggle=gtk_toggle_button_new(void);
GtkWidget *toggle=gtk_toggle_button_new_with_label(const gchar *label);

�lk fonksiyon toggle butonunu �zerinde bir yaz� olmadan olu�turur ancak ikincisi, d��meyi �zerinde label yaz�s� ile birlikte olu�turur.
D��menin durumunu a�a��daki fonksiyonla belirleyebilirsiniz:

gtk_toggle_button_set_active (GtkToggleButton *toggle_button,
                              gboolean is_active);

toggle_button, durumunu de�i�tirmek istedi�imiz d��medir ve is_active, durumdur (0 ya da 1). 0 ise bas�l� de�ildir; 1 ise bas�l�d�r.

D��menin durumunu a�a��daki fonksiyonla ��renebiliriz:

gboolean gtk_toggle_button_get_active(GtkToggleButton *button);

"toggled" olay�, bu d��meye eklenebilir:

��te bir �rnek:

#include <gtk/gtk.h>
void togg(GtkWidget *widget, gpointer *data){
   if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)))
    g_print("Durum: 1\n");
   else
    g_print("Durum: 0\n");
}

int main( int argc,char *argv[] )
   {

   GtkWidget *window;
   GtkWidget *button;

   gtk_init (&argc, &argv);

   /* Bir pencere olu�turur */
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title (GTK_WINDOW (window), "Toggle D��mesi");

   /* destroy olay�n� pncereye ekler */
   gtk_signal_connect (GTK_OBJECT (window), "destroy",
                       GTK_SIGNAL_FUNC(gtk_main_quit), NULL);

   /* bir toggle d��mesi olu�turur */
   button=gtk_toggle_button_new_with_label("Ben bir toggle d��mesiyim");

   /* D��meyi pencereye ekler */
   gtk_container_add(GTK_CONTAINER(window),button);

   /* toggled olay�n� d��meye ekler*/
   gtk_signal_connect (GTK_OBJECT (button), "toggled",
                       GTK_SIGNAL_FUNC(togg),(gpointer *)button);

   gtk_widget_show(button);
   gtk_widget_show (window);

   gtk_main ();
   return(0);
}
 

��aretleme D��mesi

��aretleme d��mesi ( i�aretleme kutusu olarak da bilinir), toggle d��mesinin bir alts�n�f�d�r. Birka� se�ene�i i�aretlemek i�in kullan�labilir:

GtkWidget* gtk_check_button_new (void);
GtkWidget* gtk_check_button_new_with_label (const gchar *label);

A��klamalar toggle d��mesi ile ayn�d�r.

�rnek :

#include <gtk/gtk.h>
void togg(GtkWidget *widget, gpointer *data){
   if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)))
       g_print("Durum: 1\n");
   else
    g_print("Durum: 0\n");
}

int main( int argc,char *argv[] )
{

    GtkWidget *window;
    GtkWidget *button;

    gtk_init (&argc, &argv);

    /* Yeni bir pencere olu�turur */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "��aretleme D��mesi");

    /* destroy olay�n� pencereye ekler. */
    gtk_signal_connect (GTK_OBJECT (window), "destroy",
                        GTK_SIGNAL_FUNC(gtk_main_quit), NULL);

    /* bir i�aretleme d��mesi olu�turur */
    button=gtk_check_button_new_with_label("Ben bir i�aretleme kutusuyum");

    /* D��meyi pencereye ekler */
    gtk_container_add(GTK_CONTAINER(window),button);

    /* toggled olay�n� d��meye ekler */
    gtk_signal_connect (GTK_OBJECT (button), "toggled",
                        GTK_SIGNAL_FUNC(togg), (gpointer *)button);
    gtk_widget_show(button);
    gtk_widget_show (window);

    gtk_main ();
    return(0);
}
 

Etiketler

Etikeler, herhangi bir yaz�y� pencerinin herhangi bir yerine yerle�tirmenizi sa�lar.
Bir etiket olu�turmak i�in a�a��daki fonksiyon kullan�l�r:

GtkWidget* gtk_label_new(const gchar *text);

A�a��daki fonksiyon ile

gtk_label_set_text(GtkLabel *label, gchar *text);

bir etiket �zerindeki yaz�y� istedi�niz zaman de�i�tirebilirsiniz.

gtk_label_set_justify(GtkLabel *label, GtkJustification jtype);

gtk_label_set_justify fonksiyonu, etiket �zerindeki yaz�n�n yerle�imini ayarlar. jtype, a�a��daki de�erleri alabilir:

gtk_label_set_line_wrap (GtkLabel *label,gboolean wrap);

fonksiyonu, yaz�n�n yerle�tirilmeis gereken yere s��mad��� zaman b�l�nebilip b�l�nemeyece�ini belirler. wrap, 1 ise yaz� b�l�nebilir; 0 ise b�l�nemez.

gtk_label_get(GtkLabel *label, gchar **str)

fonksiyonu, etiket �zerindeki yaz�y� str de�i�kenine atar.

 

Ara� A��klamas�

Ara� a��klamas�, fare bir arac�n �st�ne geldi�inde k���k bir a��klama yaz�s�n�n ��kmas�n� sa�lar. �rne�in, bir d��me i�in a��klama haz�rlars�n�z ve fare, bu d��menin �st�ne geldi�inde "bilgileri g�nder" �eklinde bir a��klama ��kar.

Bunun i�in �nce GtkToolTips olu�turulmal�d�r:

GtkToolTips* gtk_tooltips_new();

Bu a��klama bir araca eklenir:

gtk_tooltips_set_tip(GtkTooltips *tooltips, GtkWidget *widget,
                     const gchar *tip_text,const gchar *tip_private);

K���k bir �rnek:

#include <gtk/gtk.h>
int main( int argc,char *argv[] )
{
    GtkWidget *window;
    GtkWidget *button;
    GtkTooltips *tip;

    gtk_init (&argc, &argv);

    /* Bir pencere olu�turulur */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "Tooltips");

    /* destroy olay� pencereye eklenir */
    gtk_signal_connect (GTK_OBJECT (window), "destroy",
                        GTK_SIGNAL_FUNC (gtk_main_quit), NULL);

    /* D��me olu�turlur */
    button=gtk_button_new_with_label("Ben bir d��meyim");

    /* D��me pencereye eklenir */
    gtk_container_add(GTK_CONTAINER(window),button);

    /* a��klama olu�turulur*/
    tip=gtk_tooltips_new();

    /* bu a��klama bir yaz� ile d��meye eklenir*/
    gtk_tooltips_set_tip(tip, button, "Beni T�kla!",NULL);

    gtk_widget_show(button);
    gtk_widget_show (window);

    gtk_main ();
    return(0);
}

Di�er baz� fonksiyonlar:

gtk_tooltips_enable (GtkTooltips *tooltips);

Fare ara� �zerine geldi�inde a��klama ��kmas�n� sa�lar.

gtk_tooltips_disable (GtkTooltips *tooltips);

Fare ara� �zerine geldi�inde a��klama ��kmamas�n� sa�lar.

Herhangi bir araca ait a��klamaya� almak i�in �u fonksiyonu kullan�r�z:

GtkTooltipsData* gtk_tooltips_get_data(GtkWidget *widget);

GtkTooltipsData, a�a��daki �ekilde bir yap�d�r:

struct _GtkTooltipsData
{
   GtkTooltips *tooltips;
   GtkWidget *widget;
   gchar *tip_text;
   gchar *tip_private;
   GdkFont *font;
   gint width;
   GList *row;
};
A��klaman�n g�r�nmesi i�in ge�en zaman� a�a��daki fonksiyonla de�i�tirebilirsiniz:
gtk_tooltips_set_delay (GtkTooltips *tip, guint delay)
 


Combo Kutusu

Combo kutusu, t�kland���nda a�a�� do�ru uzayan bir liste i�inde size se�enekler sunan bir kutudur.

A�a��daki fonksiyonla bir combo kutusu olu�turulabilir:

GtkWidget *gtk_combo_new();

GList yap�s�nda se�enekler listesine gereksinim vard�r:

GList *glist=NULL;

�u fonksiyon ile listeye se�enekler eklenir:

GList *g_list_append(GList *list, gchar *option);

Ve bu liste kutuya eklenmelidir:

gtk_combo_set_popdown_strings(GtkCombo *combo, GList *List);

Kutu haz�r. Se�imi �u �ekilde elde edebiliriz :

gchar *gtk_entry_get_text(GtkEntry *entry);

entry bizim durumumuzda GTK_ENTRY(GTK_COMBO(combo)->entry))'dir.

gtk_combo_set_use_arrows(GtkCombo *combo,gint val);

Bu fonksiyon, klavye �zerindeki a�a��/yukar� tu�lar�n�n se�enekleri de�i�tirmesini sa�lar ya da iptal eder. val 0 ise tu�lar i�e yaramaz; 1 ise tu�lar �al���r. Unutmay�n, e�er yazarak girdi�iniz de�er listedeki de�erlerden farkl� ise bu tu�lar hi�bir �ekilde etkin de�ildir.

gtk_combo_set_use_arrows_always(GtkCombo *combo,gint val);

Bu fonksiyon gtk_combo_set_use_arrows ile ayn� i�i yapar ama bir farkla: Yazarak girdi�iniz de�er listedeki de�erden farkl� ise de tu�lar etkindir.

gtk_combo_set_case_sensetive(GtkCombo *combo, gint val);

val 1 ise hergangi bir�ey yazabilirsiniz. 0 ise e�er yazd���n�z de�er listedeki bir de�erle ayn� ise otomatik olarak listedeki de�ere d�n��t�r�l�r.

#include <gtk/gtk.h>
void act(GtkWidget *widget, gpointer *data){
   g_print((gchar *)data);
}

int main( int argc,char *argv[] ) {
   GtkWidget *window;
   GtkWidget *combo;
   GtkWidget *button;
   GtkWidget *box;
   GList *list=NULL;

   list=g_list_append(list,"Slackware");
   list=g_list_append(list,"RedHat");
   list=g_list_append(list,"SuSE");

   gtk_init (&argc, &argv);

   /* Bir pencere olu�turur */
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title (GTK_WINDOW (window), "Combo Kutusu");

   /* destroy olay�n� pencereye ekler*/
   gtk_signal_connect (GTK_OBJECT (window), "destroy",
                       GTK_SIGNAL_FUNC(gtk_main_quit), NULL);

   /* yatay bir kutu olu�turur */
   box=gtk_hbox_new(1,0);
   gtk_container_add(GTK_CONTAINER(window),box);

   /* combo kutusu olu�turur */
   combo=gtk_combo_new();

   /* listeyi kutuya ekler */
   gtk_combo_set_popdown_strings(GTK_COMBO(combo),list);

   /* a�a��/yukar� tu�lar�n� etkinle�tirir */
   gtk_combo_set_use_arrows_always(GTK_COMBO(combo),1);

   gtk_box_pack_start(GTK_BOX(box), combo,1,1,1);

   button=gtk_button_new_with_label("De�eri Yaz");
   gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(act),
   				gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry)));
   gtk_box_pack_start(GTK_BOX(box), button,1,1,1);

   gtk_widget_show(box);
   gtk_widget_show(combo);
   gtk_widget_show(button);
   gtk_widget_show (window);

   gtk_main ();
   return(0);
   }
Her t�rl� �neri ve ele�tirilerinizi g�nderebilirsiniz.  

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 

<--, Bu say�n�n ana sayfas�na gider

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>

2004-03-04, generated by lfparser version 2.43