Wish Tcl/Tk 入門2.入力 と 出力 |
#!/bin/sh # the next line restarts using wish \ exec wish "$0" "$@" # io.tcl # entry 入力窓を作ります。.e1 は名前です。 # -width 10 半角10文字 -bg 背景色 -fg 文字色 # -textvariable moji 変数文字に結果が入ります。 # entry .e1 -width 10 -bg white -fg blue -textvariable moji # # label window に 文字を表示します。変数 moji が入出力用 # label .lb1 -textvariable moji -width 10 -fg red # # pack ボタン .b1 を詰めて表示する。これがないと表示しない。 # # -fill both ( x 方向にも y 方向にも 詰めて配置) # pack .e1 .lb1 -fill both -expand yes
entry で入力した文字は、そのまま label に表示されます。 -textvariable で変数を定義すると、この変数がかわると同時に label の値を変更してくれます。
#!/bin/sh # the next line restarts using wish \ exec wish "$0" "$@" # tax.tcl 2.2 # # entry 入力窓を作ります。.e1 は名前です。 # -width 10 半角10文字 -bg 背景色 -fg 文字色 # -textvariable moji 変数文字に結果が入ります。 # label .lb0 -text 税なしの価格 -justify center entry .e1 -width 10 -bg white -fg blue -textvariable zeinasi label .lb1 -text 税込みの価格 # # 計算開始ボタンを作ります。expr = 演算せよ # button .bt1 -text 計算開始 -command { set zeikomi [ expr $zeinasi*1.05 ] } # # 入力窓 .e1上で改行(Return)しても計算開始ボタン # と同じ意味にできます。 # bind コマンド 窓 .e1 上での 改行と { ... } # 結合します。 # bind .e1 { set zeikomi [ expr $zeinasi*1.05 ] } # # label window に 文字を表示します。変数 moji が入出力用 # label .lb2 -textvariable zeikomi -width 10 -fg red # # pack ボタン .b1 を詰めて表示する。これがないと表示しない。 # -fill both ( x 方向にも y 方向にも 詰めて配置) # pack .lb0 .e1 .bt1 .lb1 .lb2 -fill both -expand yes
少し長くなりましたが、まずは上を実行して見てください。 入力する所に、マウスを移動しクリックし 数字をいれます。
計算開始ボタンを押すと税込みの値が 赤い字ででます。 これは button .bt1 の -command 機能で行っています。
button を押すと、変数 zeikomi に 変数 zeinasi の値 $zeinasi を 1.05 倍します。[ expr ... ] が計算した結果を 返してくれます。数値計算の詳細は次の章で説明します。
またボタンを押すのがめんどくさく、入力窓で改行を押したら
同じ処理をする用に、bind コマンドで 改行 このように wish ではいまどこが実行されているのかは、
ボタンのコマンドであったり、bind で結合されたコマンドで
あったり、上から順に処理されるプログラムとは少し違います。
でもこれは逆に、我々のプログラム上での判断をサボることができ
ます。
2.2 と違うのは、unix コマンドである finger が使われてい
ます。この結果が message window に $kekka として表示されてい
ます。
message や label のように共通する option が いっぱいあり
ます。どんな option が可能かは man message や man label を見
てみてください。調べなくても試してみれば ok です。kterm 上か
ら % wish として、そこの wish prompt で いろいろ試すことが可
能です。
このほかの unix コマンドも試してみてください。file 入出
力をしたい場合には、file 入出力の 章を見てください。
説明不足は勘弁ください。理解するには、プログラムの実行が
不可欠です。また少し内容を変えて実行したりして見ると、だんだ
ん理解できます。言語の学習では、似たような練習が必要です。
2.3 Unix コマンドとの連結
(実行例 2.3) 入力を使って、unix command と組み合わせて見ましょ
う。これも応用例がひろいです。
#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"
#
wm title . "tazunebito"
# finger.tcl 2.3
#
# entry 入力窓を作ります。.e1 は名前です。
# -width 10 半角10文字 -bg 背景色 -fg 文字色
# -textvariable hito 変数文字に結果が入ります。
#
label .lb0 -text 探したい人 -justify center
entry .e1 -width 10 -bg white -fg blue -textvariable hito
label .lb1 -text "探したい人の状況 (finger)"
#
# finger 実行ボタンを作ります。exec = Unix command 実行
# 注: exec は csh と異なり 子プロセスとして動きます。
#
button .bt1 -text finger -command {
set kekka [ exec finger $hito ]
}
#
# 入力窓 .e1上で改行(Return)してもfinger 実行ボタン
# と同じ意味にできます。
# bind コマンド 窓 .e1 上での 改行
rsaito@ee.uec.ac.jp