Ruby ile GUI Toolkits (wxRuby)
Merhabalar,
Bu yazımızda Ruby ile GUI Toolkits başlattığımız yazı dizisine devam ediyoruz. Bugün WxRuby kütüphanesini inceleyeceğiz. WxRuby kütüphanesi oldukça gelişmiş olan wxWidgets kütüphanesi üzerine kurulu bir yapıdır. WxRuby Microsoft Windows, Mac OS X, Linux ve BSD üzerinde sorunsuzca çalışır. Kendisinin herhangi bir görüntü teması yoktur. Hangi işletim sistemine yüklenirse, o işletim sisteminin görüntü temasını kullanır. Hemen hemen tüm Ruby uygulamalarında olduğu gibi gem ile kurulumu oldukça basit ve kolaydır. Aynı zamanda Python bağlayıcısı da (wxPython) bulunan bu yapı, C++'da yazılmış olan wxWidgets kütüphanesinden güçünü alır.
Windows, Linux ve Mac OS X için kurulumu; gem install wxruby2-preview ile gerçekleşir... Linux ve Mac OS X'de 'Super User(sudo)' ile bu işlem yapılmalıdır.
Öncelikle wxWidgets kütüphanesinin gerçekten çok güçlü olduğu tekrar vurgulamakta fayda var. Bu bilgi ışığında WxRuby'nin önceki sürümlerinin çok kötü olduğunu duymuş olabilirsiniz.. duymadıysanız şimdi duydunuz, gerçekten çok kötü idi. Bunun farkına varan sevgili yazılımcı kardeşlerimiz, wxRuby2'yi ortaya çıkardılar ve geliştirmelerini bu yapı üzerinde yapmaya başladılar. WxRuby2, şu anda oldukça iyi durumda, yazılım geliştirme, biraz sonra örnekte de göreceğiniz gibi, VRuby'den zor :) fakat FxRuby'den kolay. WxRuby'nin genel ağ adresinden daha fazla bilgiye ulaşabilirsiniz.
Herzaman olduğu gibi, hemen örneğimize geçelim;
include Wx
class MyForm <Frame
def initialize(title, position, size, style = DEFAULT_FRAME_STYLE)
@title = title
super(nil, -1, title, position, size, style)
# 'Exit' isimli button oluşturulur..
close = Button.new(self, 10, "Exit", Point.new(230, 125), Size.new(70, 40))
evt_button(10) { on_close() }
# 'Hello !' isimli button oluşturulur..
sayHello = Button.new(self, 20, "Hello !", Point.new(100, 125), Size.new(70, 40))
evt_button(20) { on_sayHello() }
# 'Username' isimli text alan oluşturulur..
userNamelbl = StaticText.new(self, -1, "Username :", Point.new(100, 75))
@userName = TextCtrl.new(self, -1, "", Point.new(160, 75), Wx::Size.new(150,-1))
end
def on_close()
dlg = MessageDialog.new(self, "Are you sure ?", @title, OK | CANCEL | ICON_INFORMATION)
result = dlg.show_modal()
dlg.destroy() # her durumda kapatılması gerektiği için, Close()'un önünde yapılmalıdır.
close() if result == Wx::ID_OK
end
def on_sayHello()
dlg = MessageDialog.new(self, "Hello, #{@userName.get_title}!", @title, OK | ICON_INFORMATION)
dlg.show_modal()
dlg.destroy()
end
end
# Sadece on_init (başlangıç) ve on_exit (bitiş) bölümleri ezilir.
class MyApplication <App
def on_init() # Uygulama oluşturulurken
puts "Application starting.."
# Kendi yazdığımız form çağrılır.
myForm = MyForm.new('Uordek WxRuby Test Form',
Point.new(100, 100), Size.new(400, 250))
set_app_name('wxRubyByUordek')
myForm.show() # Ekranda gösterilir.
end
def on_exit() # Uygulama kapatılırken.
puts "Application closing.."
end
end
begin
# Uygulama 'new' ile yaratılır.
app = MyApplication.new
app.main_loop() # İşletim sistemi ile mesaj alış verişine başlar.
ensure
GC.start # Ruby'nin Garbace Collector'ü çağrılır.
end
Örnekte görüleceği gibi, Point ve Size nesneleri ile başlangıç koordinatları ile genişlik ve yükseklik bilgilerini belirledik. Bu işlemi bu şekilde yapabileceğimiz gibi, Tk+ veya Fox'da olduğu gibi Html'e benzer biçimde de yapabiliriz. Aslına bakarsanız tercih edilen yöntem bu fakat ben işin kolayına kaçtım diyebiliriz :).
Kolay gelsin...

29.11.2007-11:17'de dedi şöyle dedi;
bende “@userName.get_title” çalışmıyor. “@userName.get_value” çalışıyor.
29.11.2007-20:52'de dedi şöyle dedi;
Verdiğin bilgi için teşekkür ederim. Düzelteceğim.
Ben bu yazıyı yazdığım zamanlarda wxruby bayağı düşük bir sürümde idi, şimdi versiyonu 1.9.2 arada bu şekilde küçük farkların olması normal.