Sayfalar

3 Mayıs 2012 Perşembe

TCL/TK İle Linux'ta Eglence...

Bu yazımda ülkemizde çok az bilinen dinamik bir programlama dilinden bahsedeceğim; Onun ismi TCL/TK... İlk duyduğumda (Ahmet Özmen-Sistem Programlama Dersi'nde) çok da eğlenceli olmayacağını düşündüğüm fakat işin içine girdikçe "Oh be! Linux de bunlar da varmış!" dediğim eğlenceli bir araca dönüştü. Oldukça basit bir mantığı var ve öğrenmesi hiç de zor değil. Ben işin daha çok TK kısmıyla ilgileniyorum. Dolayısıyla burada da bundan bahsetmek istiyorum.

TCL(Tool Command Language) aslında çok güçlü ve geniş bir kullanım alanı sunan web ve masaüstü uygulamalarına dahil edebileceğiniz açık kaynak kodlu dinamik programlama dilidir. Genişletilebilir, gömülebilir ve çoklu platform desteğine sahiptir.



TK ise grafiksel kullanıcı arayüzü(GUI) tasarlamanın kolay yollarındandır. Linux'un belki de kimileri için can sıkıcı olan shell'inden bir nebze olsun uzaklaşmanın iyi bir "fikri"dir. "Sadece Linux için mi?" diye sorulacak olursa hayır! Windows, Mac OS ve diğer ortamlarda çalışabilecek uygulamalar geliştirebileceğiniz TK, sadece TCL için tasarlanmamıştır. Yani diğer dillere de destek vermektedir. Burada da C üzerinden gitmeye çalışacağız.

Öncelikle TCL/TK'in altyapısından bahsedelim. TCL/TK script tabanlı bir dildir. Dolayısıyla her script dili gibi yorumlanması gerekmektedir. Yani işletim sisteminizde çalışması için bir yorumlayıcı gerekiyor. Bunun ismi; wish... TCL/TK kullanabilmeniz için bunu yüklemiş olmanız gerekiyor. Yorumlayıcı Wish komutları standard input'tan ve ya dosyadan okuyarak yorumlar ve kullanılabilir arayüz öğelerine çevirir ve interaktif olarak çalışmasına olanak sağlar.

Hemen kaçınılmaz başlangıç olan "Hello World"ü bir yazdıralım. Sonuçta göreceğimiz ekran aşağıdaki gibi olacaktır.


Bu ekranı görmek isteyenlerin ise bir dizine .tcl uzantılı bir dosya açıp aşağıdaki kodları yazması gerekecektir.

#!/usr/bin/wish
#Hello World yazar
set b [button .b -text "hello world" -command exit]
pack $b






Buradakilerin ne anlama geldiğini anlatmakla devam edelim. İlk satıryorumlayıcı için eklenen ve tüm tcl programlarınızda eklemek durumunda olduğunuz satırdır. Bahsi geçen path; yorumlayıcının bulunduğu yoldur. Örneğin shell'de
$> cd  ../../usr/bin
klasörüne gidip ls ile kontrol ettiğinizde wish8.5 (son versiyon)'i orada göreceksiniz.. Tabi eğer yüklüyse..

Devam edecek olursak 2. satır açıklama satırıdır. Bir sonraki set b ile aslında değişken tanımlamış oluyorsunuz. Ve bu değişkenin değeri [..] içindeki değerdir. Örneğin set b koymadan aynı programı yorumlarsanız ekranda aynı sonucu görüntülersiniz. Tabi en alttaki pack $b'yi pack .b yapmalısınız. Zira o artık bir değişken değil butonun ta kendisidir. Bir butonu aktive etmek istiyorsanız onu "pack .butonAdi" ile pencereye eklemeniz gerekmektedir. pack önüne aldığı widget'ı pencereye ekleyerek görünür kılar. Buton ismini başına . operatörünü koyarak tanıtmalısınız. Bu tüm komponentler için böyledir. -text "" ile arada boşluk bırakabileceğiniz butonun üstüne yazılacak değerleri belirtebilirsiniz. Eğer tek kelimeden ibaretse bu tırnaklara ihtiyaç duymuyor olacaksınız. "Peki bu butona tıklandığında ne olacak?" diye sorarsanız hemen bir sonraki komut -command devreye giriyor. exit varsayılan olarak tanımlanmış bir ifade ve o butona basıldığında pencerenin kapanmasını sağlıyor.

Çalıştırmak için ise ilgili dizine giderek
$> wish dosyaAdi.tcl
komutunu kullanarak shell'den çalıştırmak mümkündür.

Görüldüğü gibi 3 satırlık kodla diğer dillerde yapacağımız işlemi ne kadar da basite indirgedik! Peki TK'da başka neler var?

  • Entry alanları
Giriş yapmak isteyen kullanıcılar verilerini buraya gireceklerdir. Diğer dillerden bildiğimiz adıyla text box görevini yürütürler.

#!usr/bin/wish
entry .eInput -width 20 -textvariable input
pack .eInput

Burada yapılan .eInput adında ve girilen değeri input değişkenine atan bir entry alanı oluşturuldu.
  • Label'lar
Label bildiğimiz üzere ekrana yerleştirilen genelde kullanıcı girişlerine yardımcı olan verileri yazmamızı sağlayan etiketlerdir. Bunu TCL/TK'de aşağıdaki kod ile sağlıyoruz;

#!/usr/bin/wish
label .lLabel -text "Bir bir etikettir"
pack .lLabel
  • Checkbutton, radiobutton...
Yine bir butonun kullanılışı kadar basittir ama kendine ait bir takım özelliklere sahiptir. "-variable" denen ekstra bir özelliğe sahiptir.

#!/usr/bin/wish
radiobutton .rb1 -text "Sakarya" -variable font -value "a"
radiobutton .rb2 -text "İstanbul" -variable font -value "b"
radiobutton .rb3 -text "Ankara" -variable font -value "c"
pack .rb1 .rb2 .rb3 

Burada rb1-2-3 isimlerinde 3 adet radio buton oluşturduk ve -text ile görünür değerlerini belirledik. Butonların arkaplanda kontrol edilebilecek değerleri ise -value ile belirlendi.
  • Bunu eklediğimiz zaman pencerenin başlığını değiştirebiliriz;
#!/usr/bin/wish
wm title . "Pencere Başlığı"

  • Configure komutu
Bu komutu aşağıdaki gibi kullanarak var olan bir değişkenin değerini değiştirebiliyoruz.

#!/usr/bin/wish
button .bHello -text "Hello"
pack .bHello
.bHello configure -text "Hi!"

  • Widget Ayarları
    1.  -width ve -height: Widget'ın genişlik ve yükseklik değerleri sayısal karakterlerle girilir.
    2. -relief: Widget'ın görünümünü belirler. "raised", "sunken", "flat", "groove", "ridge" değerlerini alır.
    3. -borderwidth: Eğer -relief ile oluşturulmuşsa border'a ait genişliği tanımlar
    4. -fg ve -bg: Yazıya ve arkaplana ait renk değerlerini değiştirir. Parametre olarak red, blue, green, grey tipinde değerleri alabilir.
    5. -text: Bileşenin yazı değerini belirler.
    6. -textvariable: Widget eğer bir değer alabiliyorsa bu değerin bir değişkene alınmasını sağlar.
Bu konu uzunca yazıp okumak için fazlaca can sıkıcı olabilecek kadar geniş. Çok fazla bilinecek içerik yok ama kullanırken farklı durumlar ortaya çıkabiliyor. Eğer mümkün olursa birkaç uygulamalı açıklama yapmaya çalışsacağım. Mesela standart input ve output yoluyla veri alışverişi yapan bir programın TK arayüzü ile nasıl bağlantı kurulacağını açıklamak isterim(Evet yanlış duymadınız! Böyle bir güzelliği de var bu işin...). Şimdilik bu kadarıyla yetinelim :)




Hiç yorum yok:

Yorum Gönder