|
PerlでGUIプログラミング(2)
2023/03/18 | |||
| [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] |