■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);
}


実際には、ファイルが選択されたあとに処理をさせればよい。






-

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2006年10月13日 19:20