вівторок, 1 вересня 2009 р.

wxRuby → Welcome to wxRuby!

Цим записом я розпочну серію статей присвячену основам створення графічних додатків за допомогою бібліотеки wxWidgets на мові Ruby.

wxWidgets(раніше відома як wxWindows) — це крос-платформена бібліотека інструментів з відкритим вихідним кодом для побудови графічного інтерфейсу користувача(GUI).
wxWidgets розповсюджується під ліцензією LGPL. Проект був запущений в 1992 Юіаном Смартом (Julian Smart), який до сих пір залишається головним розробником. У 2004 році проект wxWidgets на прохання Microsoft Corporation змінив оригінальну назву "wxWindows" на "wxWidgets", за що отримав фінансову допомогу.
wxWidgets дозволяє створювати додатки для багатьох комп'ютерних платформ із мінімальними змінами у вихідному коді, або взагалі без них. Вона підтримує системи Microsoft Windows, Apple Macintosh, UNIX-подібні(для X11, Motif і GTK+), OpenVMS і OS/2. WxWidgets не імітує вигляд компонентів, використовуючи графічні примітиви різних підтримуваних платформ. Натомість wxWidgets надає тонку абстракцію до існуючих компонентів системи.
Бібліотека розроблена на C++, але може бути підключеною до багатьох інших розповсюджених мов, таких як Ruby, Python, Perl, Java, C#/.NET та інших.


wxRuby - це обгортка бібліотеки wxWidgets для роботи з Ruby. Вона однаково добре працює на Windows, Linux, Mac OS X, і з Ruby версіями 1.8 та 1.9.

Інсталяція wxRuby2
Є два методи інсталяції wxRuby2:

  • Використовуючи Rubygems для встановлення бінарного gem-у(без залежностей)

  • Із вихідних кодів



Для більшості людей на більшості операційних систем перший метод є зручнішим і швидшим. Для цього достатньо у командному рядку виконати:
gem install wxruby


Слід зазначити, що при написанні власних додатків використовуючи wxRuby, встановлену із gem-ів, ви повинні попередньо завантажити(не обов'язково для ruby >= 1.9 ) бібліотеку rubygems. Це можна зробити кількома способами:

  • Запустити ruby з аргументом -rubygems. Наприклад: ruby -rubygems my_wxruby_script.rb

  • Встановити RUBYOPT змінну оточення як -rubygems

  • Додати на початку програми рядок require 'rubygems'


Розпочнемо з просто прикладу. Покажемо вікно з кнопкою "Press me", при натисканні на яку відобразиться діалогове повідомлення.
# -*- encoding: utf-8 -*-

# Підключаємо бібліотеку wxruby2
require 'wx'

# Створюємо свій клас спадкоємець Wx::Frame з усіма потрібними нам елементами, а потім використовуємо його.
class HelloFrame < Wx::Frame
def initialize
super(nil, :title => 'Hello World!')
button = Wx::Button.new(self, :label => 'Press me') # Створюємо кнопку. За допомогою посилання self вона сама себе додасть у фрейм

evt_button(button.get_id, :bt_evt) # У випадку натиснення викликаємо bt_evt()
show # показуємо вікно
end

def bt_evt
Wx::MessageDialog.new(self, "Hello world!", "Test", Wx::OK).show_modal # створюємо діалог з однією кнопкою OK і відображаємо його за допомогою show_modal()
end
end

class HelloApp < Wx::App
def on_init
HelloFrame.new # створюємо екземпляр нашого класу
end
end

app = HelloApp.new
app.main_loop() # Запускаємо головний цикл Wx. З цього моменту програма очікує на різні події.



У результаті будемо мати таке віконечко:


В даний час API представляє собою прямий порт wxWidgets C++ інтерфейсу. Місцями цей інтерфейс є трохи аляповий, завдяки своїй довгій історії. В майбутньому розробники планують додати Ruby-специфічний шар поверх базового Wx API, аналогічно тому як це зроблено у FXRuby для Fox. Це розширене API буде простіше у використанні і орієнтуватиметься на Ruby-стиль. Крім того розробники створили підпроект wxSugar(який може використовуватись поверх wxRuby) у якості випробувального полігону для покращень синтаксису.

У гем пакеті wxRuby є досить багато прикладів роботи з різноманітними віджетами, тому цього цілком вистачить, для демонстрації можливостей Ruby + wxWidgets.
У мене це /opt/lib/ruby/gems/1.9.1/gems/wxruby-ruby19-2.0.0-x86-linux/samples


Посилання:
http://wxruby.rubyforge.org
http://www.wxwidgets.org/
http://ru.wikipedia.org/wiki/WxWidgets

2 коментарі:

T-Rex сказав...

А не хотите сделать русскую или английскую версию статей по wxRuby для wxwidgets.info
Или, если вы не против, я могу на русский перевести. Так больше людей увидит.

Anton Maminov сказав...

Не против. Даже за.
О русской версие думал. Но это будет не раньше чем когда допишу все, что запланировал по WxRuby. Тогда можно все организовать и опубликовать.
Я еще недостаточно знаком с Wx. Так по ходу и изучаю =)