[LinuxFocus-icon]
<--  | Ana Sayfa  | Eriþimdüzeni  | Ýçindekiler  | Arama

Duyumlar | Belgelikler | Baðlantýlar | LF Nedir
[an error occurred while processing this directive]
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