воскресенье, 17 августа 2008 г.

Создание графических интерфейсов на Ruby/GTK2

Что такое GTK+

GTK+ или GIMP Toolkit - это одна из наиболее популярных библиотек для построения графических интерфейсов под X Window System. Изначально GTK+ была разработана Спенсером Кимбелом (Spencer Kimball) и Питером Матисом (Peter Mattis) для нужд графического редактора GIMP (GNU Image Manipulation Program), но потом была выделена в отдельный проект. Сама библиотека GTK+ написана на C, но существуют привязки и ко многим другим языкам программирования. Всего их более 15. Среди них есть поддержка и языка Ruby. Именно о связке Ruby/GTK+ и пойдет речь в этой статье.

Установка под Linux

Количество дополнительного программного обеспечения которое придется установить зависит от вашего дистрибутива. Вот приблизительный список:
  • Интерпретатор Ruby
  • Заголовочные файлы для Ruby
  • Библиотека GTK2+ и друзья: GLib2, Pango и др.
  • Заголовочные файлы для GTK2+
После того как базовые библиотеки установлены скачиваем с сайта проекта Ruby-GNOME2 привязки GTK+ для Ruby. На момент написания статьи последней версией была 0.17.0-rc1. Распаковываем и конфигурируем пакет:
$ tar -xzf ruby-gnome2-0.17.0-rc1.tar.gz
$ cd ruby-gnome2-0.17.0-rc1
$ ruby extconf.rb
Обратите внимание на вывод последней команды. В конце должен появиться список обнаруженных библиотек:
-----
Target libraries: glib, gdkpixbuf, pango, atk, gtk, libart
Ignored libraries: gnome, gtkglext, rsvg, libglade, gnomevfs,
gstreamer, gconf, gtkmozembed, vte, bonobo, gtkhtml2,
gtksourceview, gnomeprintui, gnomeprint, libgda, poppler,
bonoboui, gnomecanvas, panel-applet
-----
Done.
Eсли среди Target libraries нет, как минимум, GTK и Pango вернитесь назад и установите недостающие библиотеки и заголовочные файлы. К примеру в Mandriva Linux девелоперские пакеты имеют окончание -devel: ruby-devel, libgtk+2.0_0-devel, libpango1.0-devel и т.д.

Теперь осталось откомпилировать и установить расширения Ruby:
$ make
# make install
Для проверки работоспособности библиотеки и привязок перейдите в директорию gtk/sample/gtk-demo и запустите скрипт main.rb Если запустилось - примите поздравления!

Установка под Windows

Несмотря на то что GTK+ изначально разрабатывалась для UNIX-систем сейчас она с успехом работает и под Windows и под OSX.

Пользователям Windows необходимо скачать One-Click инсталятор Ruby, а также инсталятор привязок для GTK+ под Windows с набором необходимых библиотек. Установка не вызывает проблем: методично нажимаем кнопку Next.

Отмечу, что с помощью Ruby/GTK+ можно легко писать приложения, которые без изменений будут работать как в Linux так и в Windows. Разумеется, в процессе разработки нужно периодически проверять приложение на всех целевых системах.

Hello World!

Ну куда же без него! Напишем простейшую программу на Ruby/GTK+


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/ruby

#
# hello-gtk.rb
#
# Александр Симаков, <xdr (тчк) box на Google Mail>
# http://alexander-simakov.blogspot.com/
#

# Подключаем библиотеку gtk2
require 'gtk2'

# Наследуем классу Gtk::Window
class HelloWindow < Gtk::Window
# Конструктор класса
def initialize(title)
# Вызываем конструктор родительского класса (Gtk::Window)
super
# Устанавливаем заголовок окна
set_title(title)
# Разрешаем отображение окна со всеми дочерними элементами
show_all
end
end

# Создаем экземпляр нашего главного окна (HelloWindow)
win = HelloWindow.new("Hello World!")

# Запускаем цикл обработки событий
Gtk.main

На экране должно появиться окно с заголовком "Hello World!"


Linux
Вид приложения в Linux

Windows
Вид приложения в Windows


Что дальше

Дальше следует вооружиться терпением! Дело в том, что документации по Ruby/GTK+ не так много, поэтому порой приходится непросто. Но не стоит отчаиваться: документация по самой библиотеке GTK+, т.е. по родному интерфейсу на C, всегда поддерживается в актуальном состоянии, кроме того, можно заглянуть и в документацию по привязкам к другим языкам если она более актуальна. Чаще всего разница в интерфейсах незначительна. Вот несколько полезных ссылок по теме:

Заключение

Мир open-source необычайно богат и многообразен. Не исключение и Ruby. Помимо привязок для GTK+ существует поддержка и многих других графических тулкитов: Qt, Tk, FOX, wxWidgets и т.д. Среди этого многообразия GTK+ удерживает очень прочные позиции: проект активно развивается, а сама библиотека имеет очень богатый набор виджетов и развитый функционал. Другими словами, если вы собираетесь программировать кросс-платформенные графические интерфейсы на Ruby и не знаете с чего начать - присмотритесь к GTK+

Статья опубликована в журнале Системный администратор (Октябрь, 2008)

1 комментарий:

  1. Интересная статья! Ждем продолжения...

    ОтветитьУдалить