PerlでGUIプログラミング(2)
2023/03/18 ※サーバー移行しました: http://cf661650.cloudfree.jp/altmo_toolbox | |||
[Prev] [Next] [Top] , Perl GUI [Prev] [Next] , [Perl Top] | |||
CUIの引数設定をGUI化
CUIはShift_JIS/cp932コードで作成する
#!perl -w # ============================================================================== # 内部文字列はcp932/Shift_JISとするので use utf8; は不要 # ============================================================================== use File::Temp qw(tempfile); use File::Basename qw(basename); use Getopt::Long qw(GetOptions); use Encode qw(decode encode); use Tk; use strict; ![]() Figure 2: Tk widghtとのコード変換処理 サンプルコードについて
MainWindowの使い方
sub mode_gui { # 引数 my ($args) = @_; # MainWindowオブジェクト取得 my $o_mw = MainWindow->new(); # オブジェクト取得 $o_mw->title(decode('cp932',$G_scrname)); # ツールタイトル(スクリプト名) $o_mw->optionAdd('*font'=>['Meiryo UI',10]); # デフォルトフォント $o_mw->resizable(1,0); # (width, hight) widthのみサイズ変更可能
Labelウィジェットの使い方
# Labelウィジェット設定(ウィジェットへ渡すデータはデコードutf-8) my $o_label_str = $o_mw->Label(-text=>decode('cp932','-str: 表示文字列')); my $o_label_fname = $o_mw->Label(-text=>decode('cp932','-fname: 出力ファイル名(省略可)'));
Entryウィジェットの使い方
# Entryウィジェット設定(ウィジェットから戻るデータはデコードutf-8) my $str_u8 = ''; # 値格納変数(utf-8想定) my $fname_u8 = ''; # 値格納変数(utf-8想定) my $o_entry_str = $o_mw->Entry(-textvariable=>\$str_u8, # 格納変数への参照 -width=>40); my $o_entry_fname = $o_mw->Entry(-textvariable=>\$fname_u8, # 格納変数への参照 -width=>40); # Entry文字初期値設定(引数からの値はcp932のため変換して渡す) $o_entry_str ->insert(0, decode('cp932',$args->{str})); $o_entry_fname->insert(0, decode('cp932',$args->{fname}));
Buttonウィジェットの使い方
# Buttonウィジェット設定(サブルーチンリファレンスの書き方はTk::UserGuideに合わせた) # (ウィジェットから戻るデータはデコードutf-8) my $o_button_run = $o_mw->Button( -text=>'run', # ボタン上のテキスト -width=>6, # ボタンの幅(6文字) -font=>['Meiryo UI',8], # デフォルトと異なるフォント設定 -command=>sub{ # 関数への参照を与える run( # モードgui指定 mode=>'gui', # 文字変換して値を渡す str=>encode('cp932', $str_u8), fname=>encode('cp932', $fname_u8) ) } );
ウィジェットの配置...今回は上から順番に置くだけ
# ウィジェット配置(上から順番に置くだけ) my %padxy = (-padx=>8, -pady=>0); # デフォルトの(x,y)パディング値 $o_label_str ->pack(%padxy, -anchor=>'w' ); # Label(表示文字列): 左寄せ $o_entry_str ->pack(%padxy, -fill=>'both'); # Entry(表示文字列): windowに合わせて伸びる $o_label_fname->pack(%padxy, -anchor=>'w' ); # Label(出力ファイル名): 左寄せ $o_entry_fname->pack(%padxy, -fill=>'both'); # Entry(出力ファイル名): windowに合わせて伸びる $o_button_run ->pack(%padxy, -anchor=>'w', # Button(run): 左寄せ -pady=>2 ); # 最後のウィジェットなのでy方向パディング=2 最後はGUIツールとしてLoopに突入してイベント駆動へ
# MainWindow実行開始 MainLoop(); 最低限はこれでOK
| |||
Notes | |||
Copyright(C) 2023 Altmo
本HPについて | |||
[Prev] [Next] [Top] , Perl GUI [Prev] [Next] , [Perl Top] |