Tk::SlideShowがなかなか素敵な件

にぽたんさんが

Shibuya.js とかでは、JavaScript とかでプレゼンツールを自作しているのに、Perl でプレゼンツールを自作している奴は、見たことがない。

と書いておられたので、インパクトに乏しそうなWin32::PowerPointを手直しするのはやめてPerl/Tkでぐりんぐりん動くのを書いてみようかと思ったのですが、その前に確か何かあったよなとひっかかりを覚えたので、調べてみたら、やっぱりありました。Tk::SlideShow
WindowsではX11::Protocolとかxlsfontsがないとか言って素直には入ってくれませんが、別にそんなんなくても(警告がうるさいだけで)動きますので、あらかじめ該当部分をコメントアウトしてインストール。

適当なフォルダを掘って、その中にとりあえずこんな.plファイルを用意します。

#!/usr/bin/perl

use strict;
use warnings;
use Tk::SlideShow;

my $p = Tk::SlideShow->init(1024, 768);

$p->save;

my ( $mw, $c, $h, $w ) = ( $p->mw, $p->canvas, $p->h, $p->w );

$p->add(
  first_page => sub {
    $p->Text( t1 => 'Hi there!', -font => $p->f3 );
    $p->load;
  }
);

$p->add(
  next_page => sub {
    $p->Text( t2 => 'This is a sample slide!', -font => $p->f3 );
    $p->load;
  }
);

$p->current( shift || 0 );

$p->play;

実行すると、まあ、きわめてふつうなTkの画面が表示されて、一ページめのHi there!というテキストが表示されるはず。

次のページに行くにはスペースキー、戻るときはバックスペース。

ここまでならよくある話なんですが、このTk::SlideShowがいいのはここから。

表示されているHi there!というテキスト、実際にはただのテキストではなく、いわゆるスプライトなのでマウスでぐりんぐりんドラッグして回れるのですが、これを好きな位置に移動してから、おもむろにsを押すと、本体のスクリプトがあるページにslide-first_page.plというファイルが生成される。

中身はこんなの。

Tk::SlideShow::Dict->Get('t1')->place(244,132);

Tkのアプリというと座標情報を設定したらいちいち起動して表示を確認して……というのを繰り返すのが常ですが、Tk::SlideShowを使うと、とりあえずテキストをスクリプトに埋め込むなり読み込むなりしたら、位置の指定とかは実際に画面を見ながら設定していける、と。

もちろんPowerPointとかだと当たり前にできることではありますが、ちょっと感動してしまいました。

ちょっと細かいことをしようと思うとやっぱりソースを読まないといけませんし、Tkの知識は必須ですが、ほかにもいろいろ機能が隠れていますし、プレゼンツールのひな形としては実に便利なんじゃないかと思った次第です。

#これもPerlだけでなくTk使ってるから反則かな? 併用でよければIngy作のSporkとか、昨年も大活躍していましたが。