一般的にperlはCGI、テキスト処理、スクレイピング等に利用されると思われがちですが、GUIだって書けるんです。
GUIを扱えるモジュールも数あるのですが、今日はGTK(GTK2)を使うサンプルをご紹介したいと思います。
GTK2-Perl - GNOME Live! gtk2-perl Home
にドキュメントやチュートリアルがあります。cpanからは"Gtk2"をインストールします。
GUIの作り方も他の言語と変りません。以下簡単な例
use strict;
use Gtk2 qw/-init/;
my $window = Gtk2::Window->new('toplevel');
$window->signal_connect('destroy' => *Gtk2::main_quit);
my $vbox = Gtk2::VBox->new(0, 10);
$window->add($vbox);
my $label = Gtk2::Label->new('Hello, Perl!');
$vbox->add($label);
my $button = Gtk2::Button->new('close');
$button->signal_connect('clicked' => *Gtk2::main_quit);
$vbox->add($button);
$window->set_border_width(5);
$window->show_all();
Gtk2->main();
実行すると以下の様な画面が現れます。
手続きとしてはC言語やpython(PyGTK)と大して変りませんね。単順にウィンドウ作ってコンテナ作ってラベルとボタンを貼り付けているだけです。まぁOOぽく書くなら"->new"よりも"new Gtk::Window()"なんでしょうね。
use strict;
use Gtk2 qw/-init/;
my $window = new Gtk2::Window('toplevel');
$window->signal_connect('destroy' => *Gtk2::main_quit);
... snip ...
またGUIビルダであるgladeを使った場合でも簡単。"Gtk2::GladeXML"をインストールし
この様な画面をgladeで作成、"project1.glade"というファイル名で保存し、以下の様な少量のコードでGUIが作成出来ます。
use strict;
use Gtk2 qw/-init/;
use Gtk2::GladeXML;
my $gladexml = Gtk2::GladeXML->new('project1.glade');
$gladexml->get_widget('button1')->signal_connect('clicked' => *Gtk2::main_quit);
Gtk2->main;
楽ちんですね。
通常、イベントハンドラはsignal_connectで行い、キーボードイベントやタイマも扱えます。シグナル名称は上記サイトからリファレンスやチュートリアルで参照して下さい。
LWPやWWW::Mechanize等といったネットワークを扱えるモジュールと組み合わせれば色んなツールも簡単に出来上がります。(手前味噌ですが「Web::ScraperなんかでXPathやCSSセレクタを決める時に便利かもしれないツール」なんてのも簡単に作れますよ)
ちなみにXMPPを使ったTwitterクライアント、TwitimもGtk2-perlを使っている様ですね。
動きのあるプログラムも楽しいですよね。
皆さんもperlでGUI、作ってみられてはどうでしょうか。




Leave a comment