Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  Deutsch  Francais  Nederlands  Russian  Turkce  

[Yazarýn Fotoðrafý]
by Charles Vidal

Yazar hakk�nda:

Paris'teki bir gastronomic lug'�n ba�kan�. GNU ve a��k kod felsefesini seviyor ��nk� ikiside insanlar�n bilgiyi payla�mas�na izin veriyor. Saksafonunu �almak i�in daha �ok zaman bulmak istiyor.

��erik:

Tk'e giri�

�eviri : Osman Solako�lu

Tcl Tk logo

�zet:

Bu makale Tck grafik ara�lar�n�n �zelliklerini tan�t�r: Tk. Birka� sat�rl�k kodla bir aray�z (GUI: Graphical User Interface) yapman�n ne kadar kolay oldu�unu g�rece�iz.



 

Tk, Tcl i�in grafik ara�lar� :WISH

Tk, Tcl diline grafik ara�lar� sa�lamak i�in yap�lm��t�r. Biz genellikle buna Tcl/Tk deriz (Tikel/Tikey diye okunur).

Tk, kulland���m�z i�letim sisteminin g�r�n���nde bir �ok platformlu grafik ara�lar� program� olarak tasarlanm��t�r. �ok platformlu olan Tcl diline tam olarak entegre olur. Tcl/Tk'in en b�y�k avantaj� basitli�idir. Bu ikili, h�zl�ca, ta��nabilen uygulamalar yapman�z� sa�lar. Tcl i�in tclsh'�n olmas� gibi, Tk i�in de wish vard�r.

 

Merhaba D�nya !

K���k bir giri� olmas� i�in klasik bir �rne�i nas�l programlayaca��n�z� g�sterece�im. Bu �rnek Tcl/Tk birle�mesinin olas�l�klar�n� ve basitli�ini g�steriyor.
pack [ label .l -text "Bonjour monde" ]

Bunu C dilinde yaz�lm�� bir gtk program�yla kar��la�t�r�rsan�z fark� daha iyi anlars�n�z...
#include <gtk/gtk.h>
Int main( int   argc,
          char *argv[] )
{
   /* GtkWidget widgetlar i�in depolama t�r�d�r */
    GtkWidget *window;
    GtkWidget *button;

    gtk_init(&&argc, &&argv);
   /* yeni bir pencere olu�tur */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    button = gtk_button_new_with_label ("Bonjour Monde");
    gtk_container_add (GTK_CONTAINER (window), button);
    gtk_widget_show (button);

    /* ve pencere */
    gtk_widget_show (window);
    gtk_main ();

    return(0);
}
... veya Motif'le kar��la�t�r�n
/* COMPILE  cc xmhello.c -L/usr/X11R6/lib  -lXm -lXt -lX11 -lXmu -o xmhello */

#include <Xm/PushB.h>
#include <Xm/Form.h>

/* Widget */

	Widget      main_widget, pushb;

main(int argc, char **argv)
{
	Widget      form;
	Arg         args[1];
	int         ac = 0;
	XmString    label_str;

	main_widget = XtInitialize(argv[0], "test", NULL, 0, &&argc, argv);
	label_str = XmStringCreate("Bonjour Monde", XmSTRING_DEFAULT_CHARSET);
	XtSetArg(args[ac], XmNlabelString, label_str);
	ac++;
	pushb = XmCreatePushButton(main_widget, "hello", args, ac);
	XtManageChild(pushb);
	XtRealizeWidget(main_widget);
	XtMainLoop();
}
Fakat scriptik bir dilin kaynak koduyla, derlenmi� bi�iminin kar��la�t�rmas� zordur. Bunun yan�nda, uygulaman�n haf�zadaki boyutu gibi di�er hususlar� da g�z �n�ne almal�y�z. Bu nedenle, tek s�yleyebilece�imiz klasik "Merhaba d�nya" program�n�n Tk'le ger�ekten kolay bir �ekilde yap�labildi�idir. Ara�lar�n g�r�n���nden �ok; genel kavramlar� ve d���nceleri dikkate almal�y�z.
Tk Widget'�n g�r�n���n� de�i�tirmek i�in Qtk ve TkStep gibi birka� yan program da vard�r.
Tk ara�lar�n�n bir�ok dille kullan�labilece�ini bilmek de ilgin� gelebilecek noktalardan biridir. Bir�ok scriptic dil gibi Tcl/Tk da �ok platformludur.  

Tk grafiksel nesne olu�turulmas�

Bu ara�lar aray�z(GUI) haz�rlamak i�in temel bir grafiksel nesneler(widget) tak�m� sa�lar.

Mevcut t�m widgetlar�n bir g�sterisini izlemek i�in, /usr/local/lib/tk8.0/demos/ dizinine gidin ve widget'� �al��t�r�n.

Bu grafiksel nesneler tak�m� s�n�rland�r�lm��t�r (a�a� widget�,combobox ....). Bununla birlikte, baz� ki�iler veya kurulu�lar baz� de�erli ilaveler yapm��lard�r.En �nl�s� : Tix the widgets Incr Tcl ve son zamanlarda m�thi� BWidget, t�m ilaveler scriptics y�resinden elde eilebilir.

 

Arabirimdeki grafiksel nesnenin a�a� yap�s�

Arabirimler, kendi �zellikleriyle, pencerelerin (dikd�rtgen) bir a�ac�yla olu�turulur.
A�a� yap�s�ndan "node"lar �rne�in buton gibi bir grafiksel nesnenin ta��y�c�s�d�rlar. Tcl/Tk'deki a�a� yap�s� �u �ekilde tan�mlan�r: Wish program� �al��t�r�ld���nda bir pencere ortaya ��kar. Bu, . (nokta) olarak isimlendirilen ana penceredir.  

Grafiksel nesnelerin olu�turulmas�: "merhaba d�nya"

Bir grafiksel nesnenin olu�turulmas� i�in tcl komutu:
nesne_ismi .(ta��y�c�_ismi.)*grafiksel_nesne_ismi [�zellik de�eri]
�rnek: label .mylabel -text "merhaba d�nya"

G�rd���n�z gibi i�leyi�, �nce grafiksel nesnenin ad�n� vermekle, burda .label, sonra ta��y�c�n�n ad�n� vermekle ( . ana penceredir) ve en sonunda �zelliklerin tan�mlanmas�yla (-text " merhaba d�nya ") ger�ekle�ir. Burda, grafiksel nesnenin olu�turulmas�ndan sonra parametrelere ula�man�n ve onlar� de�i�tirmenin m�mk�n oldu�u dikkatimizi �ekmeli.


ve �imdi etiket(label) "Bonjour Monde Frans�zca :) " olur.
�u komutla onu g�stertebilirsiniz: puts [label .mylabel -text "merhaba d�nya"] Etiket bir komutun sonucunu da g�sterebilir:
.mylabel configure -text " Tarih: [exec date ]"
Se�enekleri listelemek i�in (verilen bir widget i�in), Wish'te etkile�imli yoldan �al��arak, configure komutuna verebilirsiniz.Bunun i�in, ".mylabel configure" yaz�n.
Bu, hata verir ve kullanabilece�iniz se�enekleri g�sterir.
 

Layout: Widget konumlar� y�neticisi.

Hi�bir�ey olmuyor, ekranda hi�bir�ey g�r�nm�yor diyebilirsiniz

Asl�nda etiket tipinde bir nesne olu�turdunuz ama bunun ekranda g�r�nmesini istemediniz. B�yle oldu ��nk� nesnenin ekranda g�r�nmesi i�in baz� bilgiler gerekiyor ve siz bunu daha sa�lamad�n�z. Bu gereken bilgi; nesnenin hangi layout'a (layout pencereleri konumland�rmaya yarayan bir y�neticidir) konulaca��d�r.

Mevcut layoutlar:
  1. The packer
  2. The placer
  3. The grid
En basitini se�elim: the packer. Bu layout, nesneleri kullan�c�n�n �artlar�na g�re kendi i�ine ekler. Daha fazla bilgi ileride verilecek.

T�m �zellikleriyle Merhaba D�nya
label .mylabel -text "merhaba d�nya"
pack .mylabel

Veya tek sat�rda:
pack [label .mylabel -text "merhaba d�nya"]


Buton E�er buton olu�turursak:

button .myboutton -text "merhaba d�nya" -command "exit"
pack .myboutton

Butonun parametre olarak komut (-command) �zelli�i (sadece bir) dikkatimizi �eker. Butona t�klad���m�zda bu tcl komutu �al��t�r�l�r. Bu �rnekte, �al��t�r�lacak komut exit 'tir, Bu komut programdan ��k�lmas�n� sa�lar.

 

Grafiksel nesnelerin ve de�i�kenlerin ili�kilendirilmesi.

Tcl/Tk'n�n g�c�, grafiksel nesnelerin de�i�kenlere kolayca ili�kilendirilmesinde ortaya ��kar.The power of Tcl/tk is its great ease of associating graphical objects to a variable corresponding to their change of state. Grafiksel nesnenin durumunu ��renmek i�in fonksiyon �a��rmak zorunda de�iliz. . Ayn� yolla, e�er biri de�i�keni de�i�tirirse bu, do�ruca grafiksel nesneyi de etkiler. G�rebilece�iniz gibi, bu �zellik �ok daha az kodla �al��may� sa�lar.

�rnek

Checkbutton ve radiobutton.

  1. Checkbuton, bir durumu g�sterir.
    Bu buton bir boolean durumunu g�sterir (i�aretli veya de�il). Biz bunu checkbutonun durumuna g�re 0 (standart) veya 1 de�erlerini alan bir de�i�kenle ili�kilendirebiliriz. Ayn� zamanda, checkbutonun durumuna g�re de�i�en de�i�kenin alaca�� de�erleri de tan�mlayabiliriz.
    �rnek:

    checkbutton $w.b1 -text "Wipers OK" -variable wipers -relief flat -onvalue "Ok" -offvalue "not Ok"

  2. Radiobuton bir buton tak�m�n�n durumunu g�steren butondur.
    Radiobutonlar genellikle gruplanm��t�r.Bu, aralar�ndan birtane se�memize izin verir. Onlar� gruplamak i�in, hepsine ayn� de�i�ken ad�n� verip radiobuton se�ildi�inde al�ca�� de�eri bu de�i�kene aktarmal�y�z.
    �rnek:



    radiobutton .b1 -text "Premier " -variable size -value 1
    radiobutton .b2 -text "Second " -variable size -value 2

Entry
Bu widget kullan�c�n�n doldurabilece�i bir sat�rl�k metindir. Girilen bilgiye -textvariable komutuyla bir de�i�keni ili�kilendirebiliriz.
�rnek:


entry .e -textvariable toto -width 40
 

Layout Y�neticisi

Grafiksel nesneler genellikle bir �er�eveye konur. Ayn� �er�evede birden fazla layout y�neticisi kullanmamaya dikkat edin. �� tane layout y�neticisi var:
  1. The packer: Bir y�nlendirmeye ba�l� olarak grafiksel nesneyi konumland�r�r:
    1. top (�st)
    2. bottom (alt)
    3. right (sa�)
    4. left (sol)

    �rnek:
    pack [ button .b1 -text top ] -side top
    pack [ button .b2 -text bottom ] -side bottom
    pack [ button .b3 -text right ] -side right
    pack [ button .b4 -text right ] -side left
    

    Widget'� ayr�ca �u �ekilde de ayarlayabiliriz: option -expand (yes|no) -fill ( x|y| both)

  2. The placer: Grafiksel Nesneyi x y konumlar�na yerle�tirebiliriz.

    �rnek: place [ label .l -text "With Place"] -x 100 -y 100 .l configure -bg red

  3. The grid widgetlar� sat�r ve s�tunlardan olu�an sanal bir �zgaraya yerle�tirir. Bu, liste kutucuklar� ve �ok sat�rl� d�zenleme kutucuklar� i�in ideal layouttur. S�zdizimi ��yledir: �nce widgetlar olu�turulur, �rne�in .e_name, daha sonra �ununla ekranda g�stertilir:

    label .mainlbl2 -text "Label 2" -bd 2 -relief sunken
    grid .mainlbl2 -row 0 -column 1 -sticky news
    label .mainlbl1 -text "Label 1" -bd 2 -relief raised
    grid .mainlbl1 -row 0 -column 0 -sticky news
    label .mainlbl3 -text "Label 3" -bd 2 -relief solid
    grid .mainlbl3 -row 1 -column 0
    label .mainlbl4 -text "Label 4" -bd 2 -relief groove
    grid .mainlbl4 -row 1 -column 1

 

Olu�turulan widgetlar�n listesi

winfo ile olu�turulmu� olan grafiksel nesnelerin listesini alabiliriz.

 winfo exists name_object
Olu�turulmu� olan t�m widgetlar�n listesini almak i�in �u komutu kullanabiliriz:
winfo children .
Tcl/Tk'in bu i�levselli�i ba�ka hi�bir derlenmi� grafik ara�lar�nda yoktur ( gtk, awt, motif ...).

 

Olaylar (event)

Tk'in olay� de�erlendirmesi ve komut �al��t�rmas� -command verilmesine ba�l�d�r. Kullann�c�n�n olaylar� tem olarak y�netmek isteyebilece�i veya bir widget i�in birka� olay y�netmek isteyebilece�i durumlar da var. canvas b�yle bir widgett�r.



bind widget�n_ad� olay�n_ad� tcl_kodu.

 

K���k bir �rnek

Tar (gz) dosyas�n�n i�eri�ini g�rmek i�in bir arabirim yapaca��z..
Arabirim bir liste ve iki kayd�rma �ubu�undan olu�uyor.
Tcl scripti yap�s�n� tan�mlayal�m:
  1. Aray�z� olu�tururuz (proc makegui).
  2. Widget�n t�m yollar�n� (path) bir hashtable'a yerle�tiririz tabgui.
  3. Parametre say�s�n� tarat�r�z; e�er say� s�f�ra e�itse uygulama sonlan�r.
  4. Handle'� pipe'tan tar -tzvf name_file_tar program�yla a�ar�z.
  5. Pipe'dan okunan her sat�r� listeye ekleriz.
Bir klavye olay� olan "Control C" kombinasyonunu uygulamay� sonland�rmak i�in kullan�r�z:
bind all <Control-c> {destroy .}

Bu sadece k���k bir �rnekti, bunu geli�tirebiliriz. Dosyan�n s�k��t�r�lm�� olup olmad���n� bir tcl komutu olan string first ile test edebiliriz. E�er kullan�c� herhangi bir parametre vermezse, tar dosyas�n� se�mek i�in bir dosya se�ici ortaya ��kar. Ar�ivdeki dosyalar�n �zerinde oynamak i�in bir popmenu olu�turarak program� daha karma��kla�t�rabiliriz. Son olarak, �stte bir men� �ubu�u olu�turarak kullan�c�ya yeni dosya a�mak, yeni ar�iv yapmak gibi se�enekler sunabiliriz...
#!/bin/sh
# the next line restarts using wish \
exec wish8.0 "$0" "$@"

global tabgui

proc makegui { } {
global tabgui
#
# Liste i�in kayd�rma �ubuklar�n�n olu�turulmas�
# dikey kayd�rma �ubu�u dikey olaray ekran� kaplayacak �ekilde sa�a konumland�r�l�r
# ve yatay kayd�rma �ubu�u yatay olarak ekran� kaplayacak �ekilde a�a��ya konumland�r�l�r
#
set tabgui(scrollv) [scrollbar .scrollv -command ".list yview"]
pack $tabgui(scrollv) -side right -fill y
set tabgui(scrollh) [scrollbar .scrollh -command ".list xview" -orient horizontal ]
pack $tabgui(scrollh) -side bottom -fill x
#
# Listenin olu�turulmas�, kayd�rma �ubuklar�yla ili�kilendirilmesi
#
#
set tabgui(list) [listbox .list  \
                -yscroll "$tabgui(scrollv) set" \
                -xscroll "$tabgui(scrollh) set" \
                -relief sunken -width 20 -height 20 \
        -setgrid yes ]
pack $tabgui(list) -side left -fill both -expand yes
wm minsize . 1 1
}

#
# Arabirimin olu�turulmas�
#
makegui

if $argc>0 {set tarfile [lindex $argv 0]} else {puts stderr "tar file missing" ; exit} 
set command "tar -tzvf $tarfile"
set tube [ open |$command r] 
 while {![eof $tube]} {
    set tarresult  [ gets $tube ] 
    $tabgui(list)  insert end $tarresult
}

bind all <Control-c> {destroy .}
 

Kaynaklar

 

Makale hakk�ndaki yorumlar�n�z i�in form

Her makale kendi yorum sayfas�na sahiptir. Bu sayfada yorumlar�n�z� belirtebilir veya ba�ka okuyucular�n yorumlar�na g�zatabilirsiniz:
 Yorumlar�n�z ��in 

LinuxFocus Edit�rleri taraf�ndan elde edilmi� y�reler
© Charles Vidal
LinuxFocus.org 2000

Bir hatay� LinuxFocus'a bildirmek veya yorum g�ndermek i�in buraya t�klay�n
�eviriler Hakk�nda:
fr -> -- Charles Vidal
fr -> en Charles Vidal
en -> tr Osman Solako�lu

2000-10-28, generated by lfparser version 1.8