В этой статье приводится обзор библиотеки GTK+ и её интерфейса к языку Perl - Gtk2-Perl. Поскольку GUI-приложения написанные на Gtk2-Perl довольно большая редкость, собирать информацию приходится по крупицам. Цель статьи - постараться дать объективную оценку связке Perl/GTK+: отметить сильные и слабые стороны, предупредить о возможных сложностях и проблемах.
Библиотека GTK+
Изначально библиотека GTK+ была разработана Питером Матисом (Peter Mattis) и Спенсером Кимбелом (Spencer Kimball) для нужд графического редактора GIMP (GNU Image Manipulation Program), но потом была выделена в отдельный проект. Сама библиотека GTK+ написана на C, но существуют языковые привязки (language bindings) и для многих других языков программирования, в их числе и Perl.
Судя по графику релизов и количеству баг-фиксов проект GTK+ развивается достаточно активными темпами. За время существования проекта вокруг него сформировалось внушительное сообщество, что также является положительным моментом. В настоящее время команда ключевых разработчиков состоит из десяти человек, представляющих такие компании как Red Hat, Novell и Intel Open Source Technology Center.
Следует отметить хорошую поддержку механизмов интернационализации и локализации: обратите внимание на использование кодировки UTF-8 в примере.
Документация по библиотекам, входящим в состав GTK+, поддерживается в актуальном состоянии, однако тут есть один нюанс. Разработчики языковых привязок зачастую считают документацию по своим интерфейсам "производной" от документации по оригинальным библиотекам GTK+ и поэтому не всегда поддерживают её в актуальном состоянии. Именно такая ситуация наблюдается с Gtk2-Perl.
Установка в Linux/BSD
Поскольку GTK+ родом из страны UNIX, проблем с её установкой в UNIX-подобных системах обычно не возникает. Вполне может быть, что все необходимые библиотеки и модули у вас уже установлены. Если нет, то наверняка поставщик вашего дистрибутива подготовил пакет со всем необходимым. К примеру, в Mandriva Linux соответствующий пакет называется perl-Gtk2, а в OpenBSD - p5-Gtk2.
Установка в Windows
В Windows всё несколько сложнее. Поскольку Windows-машина с установленным компилятором языка C и необходимым для сборки окружением скорее исключение чем правило, надеяться приходится только на то, что кто-то заботливо скомпилировал для нас все необходимые библиотеки и языковые привязки к ним. Самое интересное, что на момент написания этих строк в ActivePerl, самом популярном Perl-дистрибутиве для Windows, такого пакета нет! Компиляция этого пакета со всеми зависимостями под Windows - нетривиальная и достаточно хлопотная процедура. На сайте Gtk-perl в разделе Win32 Support даются ссылки на альтернативные PPM-репозитории для ActivePerl, однако это тоже не помогло. Что же делать? Обратите внимание на проект Camelbox. Это Perl-дистрибутив под Windows, в состав которого уже включена поддержка самой последней версии GTK+. Если вы хотите использовать ActivePerl, придется приложить дополнительные усилия.
Минимальное приложение
Продемонстрируем работу Gtk2-Perl на простом примере: окне с кнопкой. Этот пример дает первоначальное представление об API библиотеки и служит своего рода тестом: если программа запустилась, значит все необходимые библиотеки установлены и работают правильно.
Приведенный пример запускается без модификаций как минимум на трёх платформах: Linux, OpenBSD и Windows. Как правило и с более сложными приложениями проблем не возникает. Итак, исходный код:
#!/usr/bin/perl
#
# Александр Симаков, <xdr (тчк) box на Google Mail>
# http://alexander-simakov.blogspot.com/
#
# Простейшая программа использующая Gtk2-Perl
#
use strict;
use warnings;
# Включаем поддержку Unicode
use utf8;
use encoding 'utf8';
# Загрузка и инициализация библиотеки Gkt2. Инициализация
# библиотеки (параметр -init) должна выполняться ровно
# один раз.
use Gtk2 -init;
sub main() {
# Создаем главное окно
my $window = Gtk2::Window->new('toplevel');
# Устанавливаем обработчик сигнала закрытия окна
$window->signal_connect( delete_event => sub { Gtk2->main_quit } );
# Создаем кнопку
my $button = Gtk2::Button->new('Тест');
# Устанавливаем обработчик на кнопку
$button->signal_connect( clicked => sub {
print("Тест Gtk2-Perl\n");
});
# Помещаем кнопку на окно
$window->add($button);
# Делаем окно, а также все дочерние виджеты видимыми
$window->show_all();
# Запускаем цикл обработки событий
Gtk2->main();
}
main();
Вид приложения в Linux:
Вид приложения в OpenBSD:
Вид приложения в Windows:
ВыводыВ целом, приложения, написанные с использованием GTK+, выглядят довольно современно и красиво. Проект GTK+ имеет давнюю историю и продолжает развиваться. Также стоит отметить хорошую поддержку интернационализации и локализации.
Несколько расстраивают сложности с установкой библиотек и языковых привязок Gtk2-Perl под Windows. Также нужно учитывать, что в отличии от оригинальной документации по GTK+, документация по Gtk2-perl не всегда актуальна и точна.
Еще один пробел - это отсутствие добротной книги по Gtk2-Perl. Из за отсутствия книги, информацию приходится собирать по крупицам из самых разных источников: оригинальная документация по GTK+, различные tutorial-ы и HOW-TO, сообщения в форумах и т.д.
Еще один пробел - это отсутствие добротной книги по Gtk2-Perl. Из за отсутствия книги, информацию приходится собирать по крупицам из самых разных источников: оригинальная документация по GTK+, различные tutorial-ы и HOW-TO, сообщения в форумах и т.д.
Ссылки
- Домашняя страница проекта GTK+
- Домашняя страница проекта Gtk2-perl
- ActivePerl от ActiveState
- Домашняя страница Camelbox
- Gtk2-perl FAQ
- Gtk2-perl tutorial by Dirk van der Walt
- Gtk2-perl tutorial by Dov Grobgeld
- Gtk2-perl tutorial by Emmanuele Bassi
- Статья: Subclassing Widgets In Perl

Добрый день, Александр!
ОтветитьУдалитьТак все-таки, насколько этот пакет рабочий в Windows? И еще вопросик, сталкивались ли Вы с какими-нибудь проблемами при работе, есть ли подводные камни?
Сама GTK+ работает в Windows отлично. С установкой Perl-интерфейса для GTK+ (Gtk2-Perl) под Windows могут возникнуть сложности: я постарался их описать.
ОтветитьУдалитьВообще, GUI-приложения на Gtk2-Perl довольно большая редкость, так что нужно быть готовым к самостоятельному поиску информации и решению проблем.