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;
[ruby]
require ‘wx’
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 [/ruby] Ö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...
bende “@userName.get_title” çalışmıyor. “@userName.get_value” çalışıyor.
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.
wxRuby nedense wxPython’a gore daha kotu geliyordu bana cunku cidden cok kotu bir soz dizimine sahipti. bana ruby’i sevdiren sey rails oldugu icin o guzelim soz diziminin bu hale gelmis olmasi beni baska bir dille masaustu programlama yapmaya itti. ancak artik wxSugar var, tek kelimeyle mukemmel. :)
bu arada sans eseri denk geldim sitenize. ruby hakkinda gordugum en guzel iki turkce siteden birisi. tebrik ediyorum.