【Perl】Win32::GUI::LoftでGUIプログラミング


Windows + PerlでGUIアプリを作る手段はいくつかあるが、一番手頃で機能もそれなりなのがWin32::GUIを使うことだ。

Win32::GUI at SourceForge
http://perl-win32-gui.sourceforge.net/cgi-bin/index.cgi

ただ、これにはGUIビルダが付いていない。GUIの構築はあくまでスクリプト上で行わねばならないのが辛いところ。それを解決してくれるツールがThe GUI Loftだ。

The GUI Loft
http://www.darserman.com/Perl/Loft/

遙か5年以上前から更新が停止してるのがなんだかもの悲しいが、その分安定してるのだと考えよう。実際に最新のActivePerl 5.10.1 + Windows7環境でも問題なく動くのだから。

インストール

上に挙げたサイトから「Loft_binary.zip」をダウンロードして解凍する。「PPM」ディレクトリにモジュールが入っているので、それを手作業でインストールする(install.batというファイル名のインストーラもあるのだが、-forceが付いてないので失敗する(ことが多い)。)

サイトが消滅してるっぽい?ので、緊急避難としてこのサイトにアップロードしておきました。
Loft_binary.zip のダウンロード


その後、公式サイトが復活したようなので、Loft_binary.zip へのリンクは削除しておきました。
又消えた?っぽいので、リンクを復活しました。

C:\> cd TheGUILoft\PPM
C:\TheGUILoft\PPM> ppm install -force AdHoc\Win32-GUI-AdHoc.ppd
C:\TheGUILoft\PPM> ppm install -force Loft\Win32-GUI-Loft.ppd

そして「tgl.exe」がGUIビルダだ。ダブルクリックすると起動する。

Hello, World!

簡単なアプリケーションを書いてみる。「tgl.exe」を起動してテキストラベルとボタンを置いたところがこれ。

2010-03-27_130926.png

これを「testGUI.gld」という名前で保存する。そして同じディレクトリに次のようなコードを書く。

testGUI.pl

#!/usr/bin/perl
use strict;
use warnings;
use FindBin;
use Path::Class;
use Win32::GUI::Loft;
my $gld = file( $FindBin::Bin, "testGUI.gld" );
my $design = Win32::GUI::Loft::Design->newScalar(
    scalar $gld->slurp, $gld->basename );
my $win = $design->buildWindow;
$win->btnButton1->Change( -onClick => sub { -1 } );
$win->Show;
Win32::GUI::Dialog;
7~9行目
ここでgldファイルを読み込んでいる。newScalarメソッドの使い方は次の通り。

$design = Win32::GUI::Loft::Design
    ->newScalar( $scalar, $fileName );
# $scalar
#   gldファイルの中身。
# $fileName
#   gldファイルのファイル名。
#   後から$design->fileNameで参照できる。
10行目
ウィンドウを生成。
11行目
ボタンにイベントを設定する。書式は次の通り。

$obj->Change( -onイベント名 => サブルーチンリファレンス );
# イベント名
#   Click, Activate, KeyUP, Timerなどなど。
# サブルーチンリファレンス
#   -1を返すとイベントループを抜ける。
12行目
ウィンドウを表示する。
13行目
イベントループに入る。

スクリプトを実行するとウィンドウが一つ現れるはずだ。「閉じる」ボタンを押すと終了する。

2010-03-27_140107.png

Webアプリケーション全盛の今、PerlでGUIアプリケーションを書くということにどれほど意味があるかわからない。でもUnix環境などで書きためたスクリプトを、Windowsユーザーでも簡単に使えるように出来るというのは便利だ。更に、PAR::Packerでexe化することによってPerlをインストールしていない端末でも利用可能になるしね。

5 thoughts on “【Perl】Win32::GUI::LoftでGUIプログラミング

  1. The GUI Loftのサイトがまたアクセスできなくなったみたいです。Loft_binary.zipを入手できなくて、お手数ですが、ファイルを送って頂けないでしょうか?

  2. Win32::GUI at SourceForgeの方のインストールの仕方がわかりません。どうすれば良いでしょうか?

    • Win32::GUI は CPAN モジュールです。 cpanm Win32::GUI 等のコマンドでインストールできると思います。

コメントを残す