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 :)
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.
Yorum için teşekkür ederim :) Sağol