13
6

More than 5 years have passed since last update.

Tcl/Tkでプログラムを書く(3)

Posted at

Tcl/Tkでプログラムを書く(2)から続く

GUIを使う

基本的なコマンドの使い方の説明も飽きてきたので、GUIを使ってみよう。単純なアプリとして、次のようなものを作ってみる。

  • ボタン1個のみからなる
  • ボタンを押すと、押した時刻を標準出力に吐き出す

単純なものだが、こんなものでも使い道はあるだろう。

まずプログラムを見てみる。

proc printtime {} {
  puts [clock format [clock seconds]]
}
button .b -text push -command printtime
pack .b

これを実行すると、次のようなボタンが現れる。

クリップボード.png

で、これを押すと、標準出力に次のような出力が出てくる。

Mon Apr 30 16:45:52 +0900 2018
Mon Apr 30 16:45:56 +0900 2018

GUI部品を選んで表示

GUIを作るには、まず部品(widget)を選ぶ必要がある。これには次のような手順が必要だ。

  1. 必要な部品を選び、部品を生成する
  2. 生成した部品を配置する

部品の生成

部品を生成するには、生成のためのコマンドを使う。ボタンを生成するのはbuttonコマンドである。

button 部品名 -text 表示文字列 -command 実行コマンド

部品の名前は . で始まり、適当な名前をつけることができる。今回のプログラムは

button .b -text push -command printtime

だったので、

  • .b という名前のボタンを作る
  • ボタンには push と表示
  • ボタンが押された時には printtime というコマンドを実行

という指定であることが分かる。

この .b という名前は単なる名前ではなく、コマンドになっている。定義されたすべての部品はそれぞれ独自のコマンドになっていて、その部品を操作したり、情報を取得するために使う。これをウィジェットコマンドという。

部品の配置

部品を生成しただけでは、部品は表示されず、使えるようにもならない。部品を使うためには配置しなければならない。

部品を配置するコマンドにはplace, pack, gridの3つがある。placeは画面の指定した座標に部品を配置するが、柔軟性がないのであまり使わない。packは画面の端から指定した方向に部品を詰め込んでいく配置法である。また、gridは画面を格子状に区切り、指定した区画に部品を詰め込む配置法である。簡単な配置にはpackを、複雑な配置にはgridを使うのが良いだろう。

packは次のように使う。

pack 部品名... [-side 方向] 

方向は top, bottom, left, right のいずれか。topにすると上から下へ、leftにすると左から右へ部品を詰める。画面に入りきらなくなると折り返す。

gridの使い方はこんな感じ。

grid 部品名 -row 行番号 -column 列番号

行番号、列番号は0から始まる。

pack,gridいずれも多くのオプションがある。たとえば、画面をリサイズした時に部品の大きさは変わるのか、変わらない場合には区画のどちら側に寄るのか、などが指定できる。

時刻の表示

GUIそのものとは関係ないが、時刻の表示についてもすこし説明する。
clock secondsコマンドは現在の秒数を返すコマンドであり、clock formatコマンドはそれを時刻表示に変換するコマンドである。

13
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
6