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 :)

Ruby ile GUI Toolkits (Gtk)” üzerine 2 yorum

  1. Aslında glade’in kaynak kodu üretmesine gerek yok. Hatta sanırım yeni versiyonu (3 galiba) sadece xml olarak çıktı veriyor. Ben hem linux’de hem windows’ta ruby-gnome2 ile gayet rahat GTK2 ve glade kullanabiliyorum. Yani glade içinde kabaca arayüzü tasarlamak ve xml olarak kaydetmek, ruby’de bu xml’i libglade2 ile yükleyip çalışabilmek mümkün.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir