■PerlでGUI
「GUIは難しい・・・。でもやりたい。」そんなときのWin32::GUIモジュール。
皮をかぶせるのにいいかも。
とりあえず、「Hello World」
ほとんどチュートリアルのまんま。サイズを変更してみる。
#!/usr/bin/perl -w
use strict;
use utf8;
binmode(STDOUT,":encoding(shiftjis)");
use Win32::GUI;
my $main = Win32::GUI::Window->new(
-name => 'Main',
-title => 'test window',
-width => 300,
-height => 200,
#-menu => $Menu,
);
### DOSを隠す場合
my $DOS = Win32::GUI::GetPerlWindow();
Win32::GUI::Hide($DOS);
### label
my $font = Win32::GUI::Font->new(
#-name => "Comic Sans MS",
-size => 24
);
my $label = $main->AddLabel(
-text => "Hello World",
-font => $font,
-top=>20,
-left=>40
);
$main->Show();
Win32::GUI::Dialog();
exit(0);
sub Main_Terminate { -1; }
ボタン
ボタンをつけてみる。ポイントは定義した変数$TestButton1という変数の後に、_Clickとつけてサブルーチンを作ってクリックされたときの処理を行う点。また、print関数の出力はdos窓なので、隠さない。
#!/usr/bin/perl -w
use strict;
use utf8;
binmode(STDOUT,":encoding(shiftjis)");
use Win32::GUI;
my $main = Win32::GUI::Window->new(
-name => 'Main',
-title => 'test window',
-width => 300,
-height => 200,
#-menu => $Menu,
);
### DOSを隠す場合
#my $DOS = Win32::GUI::GetPerlWindow();
#Win32::GUI::Hide($DOS);
### button
my $TestButton1 = $main->AddButton(
-name => "TestButton1",
-text => "Test",
-top => 30,
-left => 50,
);
$main->Show();
Win32::GUI::Dialog();
exit(0);
sub Main_Terminate { -1; }
### イベント処理( name_Click )
sub TestButton1_Click{
print "クリックされたですぅ\n";
}
sub Quit_Click {
exit(0);
}
テキストエディット
テキストエディットを使用する。ポイントは改行コードが¥nではなく、¥r¥nという点と、書きたい文字列を追加しないと内容が消えてしまうという点。
#!/usr/bin/perl -w
use strict;
use utf8;
binmode(STDOUT,":encoding(shiftjis)");
use Win32::GUI;
my $main = Win32::GUI::Window->new(
-name => 'Main',
-title => 'test window',
-width => 500,
-height => 400,
#-menu => $Menu,
);
### DOSを隠す場合
#my $DOS = Win32::GUI::GetPerlWindow();
#Win32::GUI::Hide($DOS);
### button
my $TestButton1 = $main->AddButton(
-name => "TestButton1",
-text => "Test",
-top => 30,
-left => 50,
);
my $TextContents;
my @OutputContents;
my $TestTextfield = $main->AddTextfield(
-name => "TestTextfield",
-top => 100,
-left => 20,
-readonly => 1,
-multiline => 1,
-vscroll => 1,
-hscroll => 1,
#-addstyle => WS_VSCROLL | WS_HSCROLL | ES_NOHIDESEL,
-width => 400,
-height => 200,
);
my $timer = $main->AddTimer("Timer1", 1);
$main->Show();
Win32::GUI::Dialog();
exit(0);
sub Main_Terminate { -1; }
### イベント処理( name_Click )
sub TestButton1_Click{
$TextContents .= "aaa\r\nbbb\r\n";
$TestTextfield->Text( $TextContents );
print "クリックされたよ\n";
}
sub Quit_Click {
exit(0);
}
メニューとファイルオープン
メニューの作り方は基本的にボタンと同じ。mainのウィンドウに指定することに注意。
ファイルオープンの方では、ファイル選択のダイアログが出てきた後、何も選択せずに、キャンセルした場合には、$filenameは定義されない(ことになるらしい)ので、definedを使って判断する。
#!/usr/bin/perl -w
use strict;
use utf8;
binmode(STDOUT,":encoding(shiftjis)");
use Win32::GUI;
### menu
my $Menu = Win32::GUI::MakeMenu(
"&File" => "&File",
"> &Open" => "OpenFile",
"> &Exit" => "Quit",
);
my $main = Win32::GUI::Window->new(
-name => 'Main',
-title => 'Price Extractor',
-width => 300,
-height => 130,
-menu => $Menu,
);
### DOSを隠す場合
my $DOS = Win32::GUI::GetPerlWindow();
Win32::GUI::Hide($DOS);
#ファイルの場所
my $base_dir="c:\\";
$main->Show();
Win32::GUI::Dialog();
exit(0);
sub Main_Terminate { -1; }
### イベント処理( menu )
sub OpenFile_Click {
my $lastfile;
my ( @file, $file );
my ( @parms );
push @parms,
-filter =>
[ 'HTML(*.html)', '*.html',
'All Files - *', '*'
],
-directory => $base_dir,
-title => 'Select a file';
#push @parms, -file => $lastfile if $lastfile;
my $filename = Win32::GUI::GetOpenFileName ( @parms );
if( defined $filename ){
print $filename,"\n";
}
}
sub Quit_Click {
exit(0);
}
実際には、ファイルが選択されたあとに処理をさせればよい。
-
最終更新:2006年10月13日 19:20