Ruby ile GUI Toolkits (Gtk)

Merhabalar,

Bu yazımızda konumuz GTK ile gÖrüntü arabirimleri oluşturmak. Öncelikle belirtmem gerekir ki, bu konu ile yazacağım yazıdan çok daha iyisi Pinguar tarafından seminer olarak verildi. Pdf’i buradan bilgisayarınıza yükleyebilir ve güzel güzel okuyabilirsiniz.
Aklınızdan şÖyle bir soru geçebilir; “be adam, Pinguar konu ile ilgili güzel bir yazı yazmış diyorsun, ee peki sen neden bu yazıyı yazıyorsun…?”.. geçti değil mi ? Benim de geçti. Bu sorunun cevabı ise aslında çok basit, Pinguar çok güzel bir seminer vermiş (Öyle duydum..) Ama pdf’in uzunluğu 28 sayfa kadar, eee durum bÖyle olunca, sizlere Gtk ile ilgili Ön bilgiler vermek ve küçük de olsa bir giriş yapmak bana kaldı. Üstelik Gtk’nın anlatılmadığı “Ruby ile GUI Toolkits” yazı dizisi düşünemiyorum doğrusu.

Hemen küçük Ön bilgiler ile konumuza bir giriş yapmaya çalışalım. Yazının yazıldığı sıralarda Ruby-Gtk2‘nin ‘0.16.0‘ sürümü duyrulmuştu. Bu proje isminden de anlaşılacağı gibi Ruby’nin yeni nesil GNOME 2.0 bağlayıcısıdır. Proje içerisinde iki farklı paket bulunmaktadır;

  • Bunlardan ilki ‘ruby-gtk2‘ paketi. Bu paket içerisinde sadece standart grafik arabirim işlemleri destekleyici sınıflar içeren bileşenler bulunur.
  • Diğer ise ‘ruby-gnome2-all‘ paketidir. Bu paket, standart olarak kullanılan ‘ruby-gtk2‘ paketi üzerine çok yÖnlü ve birçok durumu destekleyen büyük bir mimari içerir.

Kurulum konusuna gelirsek, Gtk+, sadece Linux, FreeBSD ve Microsoft Windows işletim sistemleri üzerinde çalışır. Linux ve FreeBSD kurulumları oldukça basittir. Bu adreste yer alan bilgilerden faydalanılarak rahatlıkla kurulumu gerçekleştirilebilir.

Windows kurulumu ise; biraz daha zor ve uzundur. Biraz, çok değil :). Hemen sloganımızı atalım, yaşasın pardus…!

  • Öncelikle Ruby/GTK2’nin kurulum dosyalarını buradan bilgisayarımıza yükleyelim. Elbette son sürümü..
  • GTK+ ve GLADE (GLADE’i, GTK+ için form tasarımcısı olarak nitelendirilebiliriz..) bilgisayara yüklenir.

BÖylece kurulum tamamlanır. Herhangi bir şekilde makinanızı ‘Restart’ etmenize gerek yok. Ama sağlam olsun diyorsanız, bir kez de Pardus için makinanızı restart edebilirsiniz :).

Hemen Örneğimizi verelim, daha sonra Örnek üzerinde konuşabiliriz. :)
[ruby]
require ‘gtk2’

# Standart msgBox yordamı…
def createMsgBox(mainWindow, text, type = Gtk::MessageDialog::INFO, button = Gtk::MessageDialog::BUTTONS_OK)
# MessageDialog <- Dialog'dan türemiştir. dialog = Gtk::MessageDialog.new(mainWindow, Gtk::Dialog::MODAL, type, button, text) dialog.title = mainWindow.title # Title alınır.. response = Gtk::Dialog::RESPONSE_NONE # Varsayılan değer NONE'dır. response = dialog.run # Cevap alınır. dialog.destroy # Dialog kapatılır.. response # Cevap geri dÖnülür. end Gtk::init # Gtk başlatılır. window = Gtk::Window.new(Gtk::Window::TOPLEVEL) # Ana form yaratılır window.title = "Ruby/GTK+ Test by Uordek" # Bu form'un kapatılması halinde program sonlanacağı sÖylenir. # Aksi taktirde program sonlanmaz. window.signal_connect("destroy") { Gtk.main_quit } # Formun kapatılmasına yÖnelik herhangi bir hareket olduğunda # "Are you sure ?" sorusu sorulur.. window.signal_connect("delete_event") { createMsgBox(window, "Are you sure ?", Gtk::MessageDialog::QUESTION, Gtk::MessageDialog::BUTTONS_OK_CANCEL) != Gtk::Dialog::RESPONSE_OK } # userName adlı TextBox oluşturulur. (Entry) userName = Gtk::Entry.new() # 'Username :' label'ı eklenir. userNamelbl = Gtk::Label.new('Username :') # 'Exit !' butonu oluşturulur. quit = Gtk::Button.new('Exit !') quit.signal_connect("clicked") { window.destroy if createMsgBox(window, "Are you sure ?", Gtk::MessageDialog::QUESTION, Gtk::MessageDialog::BUTTONS_OK_CANCEL) == Gtk::Dialog::RESPONSE_OK } # 'Hello !' butonu oluşturulur. sayHello = Gtk::Button.new('Hello !') sayHello.signal_connect("clicked") { createMsgBox(window, "Hello, #{userName.text}") } # Ana formun üzerine eklenmek üzere Table yaratılır. # 2 satır ve 2 sütünlü. # false: hücreler homojen değildir. table = Gtk::Table.new(2, 2, false) table.row_spacings = 10 # Std. satır boşluğu table.column_spacings = 10 # Std. sütün boşluğu # Öğeler Table'ın hücrelerine eklenir. table.attach_defaults quit, 1, 2, 1, 2 table.attach_defaults sayHello, 0, 1, 1, 2 table.attach_defaults userNamelbl, 0, 1, 0, 1 table.attach_defaults userName, 1, 2, 0, 1 window.add table # Table, ana forma eklenir window.show_all # Form ekranda gÖsterilir. Gtk.main # Kullanıcıdan geri bildirim beklenmeye başlanır. [/ruby] * Lütfen Örneği daha iyi anlamak için Pinguar'ın hazırladığı "pdf"i okuyun. Örnekte de gÖrebileceğiniz gibi, Gtk+, büyüklük ve konum bilgileri ile çalışmıyor. Html'de olduğu gibi arabirim hazırlanıyor. Bu Özelliğin olmayışı elbette VRuby, wxRuby karşısında (Özellikle wxRuby karşısında) eksi puan almasına neden oluyor. Sadece yordamsal programlamayı desteklemesi ile Glade'in sadece 'C' için çıktı üretmesi eski puan olarak sayılabilir. Kısaca şu zamana kadar yaptığım değerlendirmelerden edindiğim sonuçu sizlerle paylaşmak isterim; Sadece ‘Windows’ için basit bir uygulama geliştirilecek ise VRuby, diğer tüm durumlarda wxRuby sizlerin isteklerinizi hızlı ve esnek bir şekilde karşılacaktır.

Umarım ilerleyen zamanlarda WxRuby ile ilgili daha çok yazı yazmaya fırsatım olur.

Kolay gelsin :)

Share