Pull to refresh

Perl и GUI. Сравнение тулкитов

Reading time 2 min
Views 7.2K
Несмотря на большое количество модулей в CPAN, дистрибутивов Perl (Strawberry Perl, ActivePerl, MinGW Perl) возникают некоторые неопределенности, одна из них — это выбор графического тулкита для построения GUI (графического интерфейса пользователя). Об этом и пойдет речь.

Лично я остановился на ActivePerl от компании ActiveState. Также для работы применяю Komodo IDE и Perl Dev Kit.

Итак, я выбрал четыре основных модуля для работы с GUI, обеспечивающие кроссплатформенность.


Perl/Tk:
— является интерфейсом к библиотеке Tk. Работает через DynaLoader/XS.
— объектно-ориентированный подход.
— устаревший внешний вид.
— хорошая документация.
— необновлялась с 2007 года.

image

Пример программы из документации:
#!/usr/bin/perl -w
use Tk;
use strict;

my $mw = MainWindow->new;
$mw->Label(-text => 'Hello, world!')->pack;
$mw->Button(
-text => 'Quit',
-command => sub { exit },
)->pack;
MainLoop;


Tkx:
— интерфейс к Tk. Используется мост в виде прослойки Tcl.
— более низкая производительность, вызвана нагрузкой второго языка.
— Иной подход к программированию. Вам необходимо знать язык Tcl.
— Можно использовать сторонние пакеты.
— «Родное» оформление.
— является де-факто основной в ActivePerl.
— есть туториалы.

image

Пример кода:
use Tkx;
my $mw = Tkx::widget->new(".");
$mw->new_ttk__button(
-text => "Hello, world",
-command => sub { $mw->g_destroy; },
)->g_pack;
Tkx::MainLoop();


WxPerl:
— графическая библиотека WxWidgets.
— объектно-ориентированный интерфейс.
— «родное» оформление.
— больший размер файлов.
— сложности при установке.

image

use Wx;
my $app = Wx::SimpleApp->new;
my $frame = Wx::Frame->new( undef, -1, 'Hello, world!' );
$frame->Show;
$app->MainLoop;


Gtk:
— использует Glib/Gtk.
— специфичный внешний вид.
— можно использовать темы.
— имеет проблемы при установке.
— проблемы в Windows, OSX.

Пример Helloworld'а
use Gtk2 -init;
my $window = Gtk2::Window->new ('toplevel');
my $button = Gtk2::Button->new ('Hello world');
$button->signal_connect (clicked => sub { Gtk2->main_quit });
$window->add ($button);
$window->show_all;
Gtk2->main;


К сожалению установить и запустить это чудо у меня не получилось. ОС: Windows Vista.
Поэтому, приведу официальный скриншот.
image

Лично я думаю, что самый оптимальный вариант это использовать либо Tk (если оформление не критично), либо Tkx.
Tags:
Hubs:
+21
Comments 46
Comments Comments 46

Articles