Software_tk

◎tk

┌──┐
│目次│
├──┘
│ ◆GUI部品 “gui”
│ ◆画像、色指定
│ ◆配置マネージャ
│ ◆ダイアローグボックス
│ ◆窓の生成、破壊
│ ◆ウインドウマネージャ
│ ◆セレクション、クリップボード
│ ◆tk 制御
│ ◎wish
│ ◎サンプルプログラム


◆GUI部品
tkのGUI部品は、その名前自体がwishのコマンドになり、その第1引数として、部品コマンド(widget command)をとる。

※GUI部品の名前は「.」で始める。
│ .b1 部品コマンド名 引数…

例)
button .b1 -text “Exit” -command “exit”
pack .b1

でボタン.b1が現れる。

ボタン.b1のtextを読み出すためには、
.b1 cget -text
のようにする。

_◇部品の共通オプション

-foreground 前景色
│ -fg
-backgroud 背景色
│ -bg
-borderwidth 部品枠幅
│ -bd
-activeforeground アクティブ時の前景色
-activebackground アクティブ時の背景色
-disableforeground ディスエイブル時の前景色
-highlightbackground 入力フォーカス背景色
-highlightcolor 入力フォーカス枠色
-highlightthickness 入力フォーカス枠幅

_◇テキスト表示部品共通オプション

-anchor 部品内イメージの配置
-justify テキスト揃え指定
-wraplength テキスト折りたたみ幅
-text テキスト
-textvariable テキスト格納変数
-underline 下線つきにする文字の位置
-font フォント
-kanjifont 漢字フォント
-cursor マウスカーソルの形
-bitmap 内部に表示するビットマップ
-image 内部に表示するイメージ
-relief レリーフ効果
│ flat raised sunken groove ridge
-takefocus フォーカス取得値
-padx 水平詰め物
-pady 垂直詰め物

_◇ルートの窓
ルートの窓は「.」という名前を持つ。よってそのサイズなどを一般部品同様に変えることができる。

例)
. configure -width 300 -height 300

_◇button

例)
button .b1 -text “exec” -command {exec aho}

※部品コマンド
cget
│ オプションの現在値を検索
configure 引数
│ オプションの値を設定
│ 引数なしの場合、全ての値のリストを取り出す
flash
│ ボタンを点滅させる
invoke
│ ボタンを押したときと同じ動作を起動

※オプション
-width 幅
-height 高さ
-command 押されたときに実行するコマンド
-state ボタンの状態

_◇label

例)
label .l0 -text “aho”

※部品コマンド
cget
│ オプションの現在値を検索
configure 引数
│ オプションの値を設定
│ 引数なしの場合、全ての値のリストを取り出す

※オプション
-width 幅
-height 高さ

_◇checkbutton
変数に対してON/OFFに応じた値を設定できる。デフォルトはONで1, OFFで0

例)
checkbutton .c0 -text “Check” -variable chk

※部品コマンド
cget
│ オプションの現在値を検索
configure 引数
│ オプションの値を設定
│ 引数なしの場合、全ての値のリストを取り出す
flash
│ ボタンを点滅させる
invoke
│ ボタンを押したときと同じ動作を起動
select
│ ON
deselect
│ OFF
toggle
│ トグル

※オプション
-variable 値設定変数
-onvalue on値
-offvalue off値
-indicatoron チェック領域表示
-selectcolor onの背景色
-selectimage onの表示イメージ

_◇radiobutton
N個のオプションのうち1個を選ぶ。同じ変数を共有するボタンがグループとなる。

※部品コマンド
cget
│ オプションの現在値を検索
configure 引数
│ オプションの値を設定
│ 引数なしの場合、全ての値のリストを取り出す
flash
│ ボタンを点滅させる
invoke
│ ボタンを押したときと同じ動作を起動
select
│ ON
deselect
│ OFF

例)
radiobutton .r0 -text “P” -value p -var col
radiobutton .r1 -text “B” -value b -var col

※オプション
-variable 値設定変数
-value 設定する値

_◇scale
連続的な数値からの選択を行うもの。通常、縦か横、最小値、最大値、値を格納する変数を指定する。

※部品コマンド
cget
│ オプションの現在値を検索
configure 引数
│ オプションの値を設定
│ 引数なしの場合、全ての値のリストを取り出す
coords 値
│ 値に対応するつまみの座標のリストを返す
get
│ スケールの現在位置を返す
set 値
│ 現在値を設定する
identify x y
│ 指定した座標との位置関係を返す

※オプション
-orient h(水平)かv(垂直)か指定
-from 最小値
-to 最大値
-length スケールの望ましい長さ
-sliderlength スライダの望ましい長さ
-width スケールのつまみの望ましい幅
-showvalue 現在値を表示
-resolution 最小変化量
-digits 有効桁数
-tickinterval 目盛り間隔
-label ラベル
-bigincrement 大きく動かす単位

_◇entry
1行の文字列を入力するための入力欄

※部品コマンド
cget
│ オプションの現在値を検索
configure 引数
│ オプションの値を設定
│ 引数なしの場合、全ての値のリストを取り出す
get
│ 欄の内容を取り出す
insert 位置 文字列
│ 指定した位置の直前に文字列挿入
delete 位置 位置
│ 2つの位置の間を削除。1位置指定では1文字削除。
index 位置
│ 指定した位置が何文字目か返す
icursor 位置
│ 挿入カーソルを指定位置の直前に置く
selection present
│ 選択領域があれば1、無ければ0
selection clear
│ 非選択状態にする
selection range 位置 位置
│ 2つの位置の間を選択領域にする
selection from 位置
│ 選択領域の基点となるアンカー位置
selection to 位置
│ アンカーから位置までを選択
selection adjust 位置
│ 選択領域の先頭/末尾のうち指定位置に近い方を指定位置に変更し、遠い方をアンカー位置にする
scan mark X座標
│ 横スクロールの基点
scan dragto X座標
│ 基点とX座標の10倍横スクロール
xview 位置
│ 指定した文字位置が左端となるようにスクロール
xview moveto 比率
│ 0~1の比率で指定した文字が左端になるようにする
xview scroll 数値 units
│ 正なら左端、負なら右端から指定文字から先表示
xview scroll 数値 pages
│ 正なら左端、負なら右端から指定ピクセルから先

※オプション
-textvariable 入力された値が入る変数
-show マスク文字の指定
│ 例) show “*”

_◇frame
中に他の部品を詰めるだけの部品。

※部品コマンド
configure
cget

※オプション
-visual
-colormap
-class

フレームの中に部品を配置する場合は、フレーム名の後に.で区切ってその部品の名前を書く

例)

frame .f0
foreach i {1 2 3 4 5} {
  button .f0.b$i -text "Button .f0.b$i"
  pack .f0.b$i -fill both
}

_◇message
メッセージを適宜折りたたんで表示する。

※部品コマンド
configure
cget

※オプション
-text 文字列
-textvariable 文字列変数
-width 幅
-aspect 縦横比
-justify 寄せ
│ center
│ left
│ right

_◇menu
部品コマンドpostによって画面に表示され、内容を選択するか部品コマンドunpostにより画面から消える

menu 名前 オプション

※オプション
│ -selectcolor
│ -postcommand
│  post時に実行されるコマンド
│ -tearoff
│  メニューを引きちぎることを許すか否か

※メニューへの項目追加

メニュー名 add 種別 オプション

①種別
│ command
│  選択すると決まった動作を行う
│ checkbutton
│  on/offの値をとる
│ radiobutton
│  複数のうちから一つ選択
│ cascade
│  サブメニュー
│ separator
│  区切り

②オプション
│ -label
│  ラベル文字列
│ -bitmap
│  ラベルの代わりのビットマップ
│ -image
│  ラベルの代わりのイメージ
│ -state
│  normal
│  active
│  disabled
│ -underline
│  ラベルの何文字目にアンダーラインを引くか
│  (ショートカットキー Alt+X となる)
│ -command
│  選択されたときのコマンド
│ -indicatoron
│  checkbutton/radiobuttonでのインディケータ
│ -variable
│  checkbutton/radiobuttonでの格納変数
│ -value
│  radiobuttonで格納する値
│ -onvalue
│  checkbutton onの値
│ -offvalue
│  checkbutton offの値
│ -selectimage
│  checkbutton/radiobuttonでの選択イメージ
│ -menu
│  カスケードメニュー
│ -accelerator
│  ショートカットキー表示
│ -font
│  フォント
│ -foreground
│  前景色
│ -background
│  背景色
│ -activebackground
│  起動状態の背景色
│ -activeforeground
│  起動状態の前景色

③メニューの表示

※マウス位置へのメニューの表示用ボタン

button .b0 -text "Menu" -command {
  .m0 post [winfo pointerx .] [winfo pointery .]
}

※tk_popupによるメニューの表示

│ tk_popup メニュー X座標 Y座標 [項目]

④部品コマンド

active 項目
│ 項目を活性状態にする
delete 項目
│ 指定項目を削除
entrycget 項目 オプション
│ 項目に対するcget
entryconfigure 項目 オプション
│ 項目に対するconfigure
index 項目
│ 項目番号を返す
insert 項目 種別 オプション
│ 指定項目の直前に新しい項目を挿入
invoke 項目
│ 項目を起動
postcascade 項目
│ 項目がcascadeのとき、サブメニューをpost
type 項目
│ 種別を返す
yposition 項目
│ メニュー上端からのピクセルを返す
add
post
unpost
configure
cget

※項目の指定方法
数値 先頭を0
@数値 上端からのピクセル
end, last 最後
active 活性状態項目
none どれでもない(全非活性化に使う)
パターン パターンマッチ

_◇menubutton
メニューをポップアップさせるための専用ボタン

※固有オプション(他はbuttonと同じ)
-menu
│ ポップアップするメニューを指定。メニューはこのボタンの子供でなければならない
-indicatoron
│ 選択ボタンを表すMotif標準飾りを表示するかどうか

※部品コマンド
cget
configure

_◇tk_optionMenu
複数の値から一つを選ぶメニューを作る

tk_optionMenu 名前 変数 値 値

│ 名前 メニューボタン
│ 変数 選択値が格納されている変数
│ 値 選択肢

_◇listbox
テキスト行の集まりであるような部品。内容の扱いは行単位。マウスの中ボタンで操作可能。

例)

.l0 delete 1 end
set fd [open [tk_getOpenFile]]
while { [gets $fd line] >= 0 } {
  .l0 insert end $line
}
close $fd

※オプション
-xscrollcommand
-yscrollcommand
│ スクロール時に実行されるコマンドの前半部。これに「set 開始点 終了点」という文字列がコマンドとして渡される。
-setgrid
│ 外側の窓の変更をこの部品に反映するか否か
-exportselection
│ セレクションを他のアプリと共有するか否か
-selectmode
│ single 1要素のみ選択可能
│ browse ドラッグでの1要素選択可能
│ multiple 追加選択可能、メタキーでトグル
│ extended コントロールキーでトグル、メタキーで連続選択

※部品コマンド
activate 位置
│ 指定行を活性状態にする
bbox 位置
│ 指定した行を含む矩形の左上隅X,Y、幅、高さを返す
curselection
│ 選択行の行番号のリストを返す
delete 位置
│ 指定範囲を削除する
get 位置
│ 指定範囲を1つの文字列として返す
index 位置
│ 指定位置の行番号
insert 位置 文字列
│ 指定行の直前に文字列を挿入
nearest y
│ y座標に最も近い行番号
selection anchor 位置
│ 指定位置をアンカーとする
selection clear 位置 位置
│ 指定範囲を選択から除外
selection includes 位置
│ 指定位置が選択範囲に入っているか否かを返す
selection set 位置 位置
│ 選択範囲に追加
see 位置
│ 指定位置が見えるようにスクロール
scan mark x y
│ スキャン機能の始点指定
scan dragto x y
│ スキャン機能
xview/yview
│ 現在見える範囲の比率
xview/yview 位置
│ 指定位置が先頭になるようにスクロール
xview/yview moveto 数値
│ 比率の位置までスクロール
xview/yview scroll +/-1 unit
xview/yview scroll +/-1 pages

_◇scrollbar

※オプション
-orient
│ vertical
│ horizontal
-throughcolor
│ エレベータの色
-jump
│ false 連続スクロール
│ true ジャンプスクロール
-command
│ スクロールバーが動いたときに実行するコマンド
│ スクロールバーの動作により
│  moveto 比率
│  scroll ±1 unit
│  scroll ±1 pages
│ が補完される。

※部品コマンド
set 始点 終点
│ エレベータの始点と終点の位置を全体に対する比率で指定する
get
│ setで指定する値のリストを返す
active 要素
│ arrow1
│ slider
│ allow2
│ 指定要素をアクティブにする
delta dx dy
│ dx(dy)ピクセルの動きが全体の比率でどれだけか返す。dxかdyの一方だけ意味を持つ
fraction x y
│ 基点からx(y)ピクセル進んだところの比率
identify x y
│ 座標(x y)の位置にある要素の名前を返す。

_◇メニューバー
tk4.0以降:1つの窓の中にある一連のメニューボタンが自動的に連携⇒専用部品不要

_◇テキスト欄内の位置指定

N N文字目(最初は0)
@N 欄の左からNドット目の位置にある文字
end 最後の文字の直後
insert 挿入カーソルの直後
anchor アンカー位置
sel.first 選択文字の先頭
sel.last 選択文字の末尾の直後

_◇タグ (tag)
図形につける識別子。図形を操作するコマンドは、操作対象となる図形の指定を、番号のほかにもタグを使って行える。
※タグの設定は、図形を生成するときにオプション -tagsをつける

_◇canvas
グラフィックを書き込める領域を作成する。

例)
canvas .c0 -width 200 -height 150

※オプション
-width
│ 幅
-height
│ 高さ
-xscrollcommand
-yscrollcommand
│ スクロール用コマンド
-xscrollincrement
-yscrollincrement
│ スクロール単位
-scrollregion
│ 4値のリストによりスクロール域の左端、上端、右端、下端を示す
-confine
│ 見える範囲をscrollregion内に限るか否か
-closeenough
│ マウスカーソルとグラフィックを当たったと見なす距離(デフォルト1.0)

※create 部品コマンド
create 種別 座標とオプション
│ 図形のIDとなる数値を返す。この数値を使って図形を操作できる。

①rectangle x1 y1 x2 y2 オプション
│ 矩形を描画する
│  -fill 色
│  -stipple ビットマップ
│  塗りつぶす模様のビットマップ
│  -outline 色
│  外形線色(デフォルト黒)
│  -width 幅
│  外形線幅(デフォルト1.0)
│  -tag リスト
│  図形につけるタグのリスト
②oval x1 y1 x2 y2 オプション
│ 楕円を描画する
│  -fill 色
│  -stipple ビットマップ
│  塗りつぶす模様のビットマップ
│  -outline 色
│  外形線色(デフォルト黒)
│  -width 幅
│  外形線幅(デフォルト1.0)
│  -tag リスト
│  図形につけるタグのリスト
③polygon x1 y1 … オプション
│ 多角形を描画する。最初と最後の点が結ばれる。
│  -fill 色
│  デフォルト黒
│  -stipple ビットマップ
│  塗りつぶす模様のビットマップ
│  -outline 色
│  外形線色(デフォルト なし)
│  -width 幅
│  外形線幅(デフォルト1.0)
│  -tag リスト
│  図形につけるタグのリスト
│  -smooth 真偽
│  スプライン曲線で滑らかにするか
│  -splinesteps 数値
│  一つの辺をいくつの直線で近似するか
④line x1 y1 … オプション
│ 折れ線を描画する。
│  -fill 色
│  デフォルト黒
│  -stipple ビットマップ
│  塗りつぶす模様のビットマップ
│  -width 幅
│  外形線幅(デフォルト1.0)
│  -tag リスト
│  図形につけるタグのリスト
│  -smooth 真偽
│  スプライン曲線で滑らかにするか
│  -splinesteps 数値
│  一つの辺をいくつの直線で近似するか
│  -arrow none/first/last/both
│  -arrowshape {a b c}
│  a 根元から先端までの長さ
│  b 両端から先端までの距離
│  c 中央から両端までの距離

│  -capstyle butt/projecting/round
│  -joinstyle bevel/miter/round
⑤arc x1 y1 x2 y2 オプション
│ 楕円指定と座標は共通。オプションにより角度を指定。
│ -start 角度
│  度で指定。3時方向が0度。反時計周り。
│ -extent 角度
│ -style arc/chord/pieslice
│ -fill 色
│  デフォルト黒
│ -stipple ビットマップ
│  塗りつぶす模様のビットマップ
│ -outline 色
│  外形線色(デフォルト なし)
│ -width 幅
│  外形線幅(デフォルト1.0)
│ -tag リスト
│  図形につけるタグのリスト

※部品コマンド
itemcget ID オプション
│ 図形に関する属性を得る
itemconfigure ID オプション 値
│ 図形に関する属性をセットする
delete ID
│ 図形を削除する
image x1 y1 オプション
bitmap x1 y1 オプション
│ -anchor center/n/s/e/w/ne/nw/se/sw
│ -tags タグリスト
│ -image イメージ名
│ -bitmap ビットマップ指定
│ -forground 色
│ -background 色
text x1 y1 オプション
│ -anchor center/n/s/e/w/ne/nw/se/sw
│ -fill 色
│ -stipple ビットマップ
│ -taglist
│ -text 文字列
│ -font フォント
│ -justify center/left/right
│ -width 長さ

※canvasの中の窓
window x1 y1 オプション
│ -anchor center/n/s/e/w/ne/nw/se/sw
│ -taglist
│ -window 窓ID
│ -width 幅
│ -height 高さ

例)
button .b0 -text “Button 1” -command “exit”
.c0 create window 100 50 -window .b0

※canvas部品の操作コマンド
type ID
│ 部品の種別を返す
bbox ID
│ 指定部品を囲む位置と大きさのリストを返す
coords ID [座標…]
│ 指定部品の座標パラメータの呼び出し/書き込み
move ID dx dy
│ 相対移動
focus [ID]
│ ID指定しなければフォーカスのある部品を返す
│ 指定すればその部品にフォーカス移す
gettags ID
│ 指定部品のタグリストを返す
lower ID
│ 重なり順を低くする
raise ID
│ 重なり順を高くする
scale ID x y sx sy
│ スケーリング (x,y)原点でsx,sy倍
bind ID [[イベント] コマンド]
│ その部品上でのイベント動作を指定
canvasx 画面 [目盛]
│ 画面x座標をキャンバス内座標に変換
canvasy 画面 [目盛]
│ 画面y座標をキャンバス内座標に変換

※text専用の操作コマンド
x,y 座標は@x,yにより指定する

dchars ID 始め [終わり]
│ 範囲文字消去
icursor ID 位置
│ 位置に挿入カーソルを置く
index ID 位置
│ 指定位置の文字番号
insert ID 位置 文字列
│ 位置に文字列挿入
select item
│ 現在選択領域を持つテキスト部品を返す
select clear
│ 選択解除
select from ID 位置
│ 選択アンカー設定
select to ID 位置
│ アンカーから指定位置まで選択
select adjust ID 位置
│ 選択領域の末端のうち位置に遠い方をアンカー近い方を指定位置とする

※find
特定の条件にかなった部品IDをリストにして返す。
find all
find withtag ID
find above ID
find below ID
find enclosed x1 y1 x2 y2
overlapping TAGenclosed x1 y1 x2 y2
find closest x y [近さ] [ID]

※タグの設定、除去
addtag TAG
dtag ID TAG

※PostScriptファイルの生成
キャンバスの内容をPSファイルとして生成する

-file ファイル名
│ 出力先ファイル。省略すると巨大な文字列として返される。
-colormode color/mono/gray
-colormap 配列名
-fontmap 配列名
-x 位置
-y 位置
-width 幅
-height 高さ
-pagewidth サイズ
-pageheight サイズ
│ 紙の上での大きさ(両方指定した場合はwidth優先)
-pagex 座標
-pagey 座標
-pageanchor 指定
-rotatge 0/1
│ 紙の方向0なら縦、1なら横

_◇text
テキストを編集可能な領域を作成する。

※オプション
-width
-height
│ 幅と高さ
-xscrollcommand
-yscrollcommand
│ スクロールコマンド
-setgrid
│ 大きさ変更時に文字の幅、高さの倍数にするか
-wrap none/char/word
│ 折りたたまない、文字単位、ワード単位
-spacing1
│ 各行の上。ラップした場合は先頭部のみ
-spacing2
│ 折りたたまれた部分以降の上の空き
-spacing3
│ 下の空き。折たまれた場合は最終部。
-tabs
│ タブ位置指定。タブ間隔のリストと
│ left
│ center
│ right
│ numeric 小数点揃え
│ を指定。

※標準バインディング(マウス)
左クリック 挿入カーソル配置
│ 左ドラッグ 選択
左ダブルクリック 単語選択
│ 左ドラッグ 単語単位選択
左トリプルクリック 行選択
│ 左ドラッグ 行単位選択
シフト付き 選択範囲の調整
コントロール左クリック
│  選択範囲変えずカーソル位置変更
左ドラッグ中に範囲外に出るとスクロールが起きる
中ドラッグ 上下左右のスクロール
│ (スキャンと呼ぶ)
中クリック 選択範囲の挿入

※標準バインディング(キーボード)一部
(Windows上)
Shift+矢印
│ 選択領域拡張
Control+V
│ ペースト
Control+C
│ コピー
Home
│ 文頭
End
│ 文末
Control+Home
│ 領域先頭
Shift+Control+Home
│ 領域先頭まで選択拡張
Control+End
│ 領域末尾
Shift+Control+End
│ 領域末尾まで選択拡張
Control+/
│ 全選択
Control+K
│ カーソルから行末まで削除
Control+O
│ 改行挿入
Control+T
│ カーソルの前後2文字入れ換え

※テキスト位置指定

M.N M行N文字目(行は1、文字は0先頭)
│  Nの代わりにendは行末改行
@x,y 部品内x,y位置
end 最後の文字の直後
マーク名 マーク位置
タグ名.first
│  タグ部先頭
タグ名.last
│  タグ部末尾
窓指定
│  textに埋め込まれた窓

(基本指定に付加する指定)
+Nchars, -Nchars
+Nlines, -Nlines
linestart, lineend
wordstart, wordend

※マーク
特定位置(文字と文字の間)に名前をつける。明示的に消さない限り、なくならない。

insert 挿入カーソルを示す特殊マーク
current マウスカーソル位置を示す特殊マーク

mark set マーク名 位置
mark unset マーク名
mark names
│ マーク名のリスト
mark gravity マーク名 left/right
mark next 位置
mark prev 位置

※タグ
ある範囲つける印
⇒タグ毎に色やフォントを指定可能
⇒イベントのバインディングも可能

tag add タグ名 位置 [位置]
tag delete タグ名
tag names
│ タグリストを返す
tag raise タグ名
│ 優先順位を最上位に
tag lower タグ名
│ 優先順位を最下位に
tag nextrange タグ名 位置
tag prevrange タグ名 位置
│ タグのついている最初のテキスト範囲をリストで返す
tag ranges タグ名
│ タグのついている全リストを返す
tag remove タグ名 位置 [位置]
│ タグを取り除く
tag cget タグ名 オプション
│ 属性を参照する
tag configure タグ名 オプション
│ 属性を設定する
tag bind タグ名 イベント コマンド
│ キー、マウスイベントをバインディングする

tagの属性
│ -foreground
│ -background
│ -fgstipple
│  文字描画用ビットマップ
│ -bgstipple
│  背景ビットマップ
│ -borderwidth
│  ふちの幅
│ -relief
│  凹凸の種類
│ -font
│  文字フォント
│ -underline
│  文字に下線を引くかどうか
│ -overstrike
│  文字の上に横線を引くかどうか
│ -offset
│  文字のベースラインのピクセルオフセット
│ -justify left/right/center
│ -wrap none/char/word
│ -tabs
│  タブ位置のリスト
│ -lmargin1
│  行頭字下げ(ピクセル単位)
│ -lmargin2
│  折りたたみ2行目以降の字下げ
│ -rmargin
│  右側マージン
│ -spacing1
│  行の上側スペーシング(ピクセル単位)
│ -spacing2
│  折りたたみ2行目以降の上側スペース
│ -spacing3
│  行下スペーシング

※部品コマンド
bbox 位置
│ 指定位置を囲む矩形をリストで返す
dlineinfo 位置
│ 指定行位置を囲む矩形と上端からベースまでの距離をリストで返す
index 位置
│ 位置を「行.文字位置」で返す。
compare 位置 ==/!=/</<=/>/>= 位置
get 位置 [位置]
delete 位置 [位置]
insert 位置 文字列 [タグリスト]
│ 文字列挿入するとともにタグづけ
search オプション パターン 位置 [終了位置]
│ 見つかれば位置、見つからなければ空文字列。
│ -forwards
│ -backwards
│ -exact
│ -regexp
│ -nocase
│ -count 変数名
│  マッチした文字数を変数に格納
│ – オプション末尾

※埋め込み窓
tkのあらゆる種類の窓をテキスト部品に埋め込むことができる。

部品コマンド
│ window create 位置 オプション
│  窓を埋め込む
│ window names
│  テキスト部品に埋め込まれている窓のリスト
│ window configure 位置 オプション
│ window cget 位置 オプション

オプション
│ -window
│  窓IDの指定
│ -create
│  埋め込み窓を生成して返すコマンド指定
│  窓IDの指定とは両立しない
│ -align top/baseline/bottom
│ -stretch
│  窓が行の高さより小さいときに引き伸ばすか
│ -padx, -pady
│  窓の左右、上下のスペース(ピクセル単位)

※ダンプ
get では取り出せないタグ、マーク、埋め込み窓まで含めた全情報を取り出す。

dump オプション 位置 [位置]

出力は
│ キー 値 位置 …
を繰り返すリスト
│ キー
│  text 改行をまたがないtext
│  mark マーク
│  window 埋め込み窓
│  tagon タグの始まり
│  tagoff タグの終わり

オプション
│ -text
│ -mark
│ -window
│ -tag
│ -all デフォルト
│ -command コマンド
│  出力をリストで返す代わりに、3要素のリスト毎に指定されたコマンドに渡す。


◆画像、色指定

_◇image
画像ファイルを元にイメージを生成する。サポートされる画像ファイルはGIFまたはPPM形式(白黒ビットマップのXBM)

image create photo イメージ名 -file ファイル名

上記のイメージ名を、”-image”オプションを持つGUI部品で呼び出すことで、イメージが表示される。イメージ名そのものは部品コマンドのように使える。

例)
image create photo maru -file maru.gif
label .l0 -image maru
pack .l0

image create 種別
│ 種別のイメージを生成する
│  bitmap(白黒2値)かphoto(カラー)
image types
│ 生成可能な種別のリストを返す
image names
│ すべてもイメージのリストを返す
image types イメージ名
│ 指定イメージの種別を返す
image delete イメージ名
│ 指定イメージを削除
image height イメージ名
│ 指定イメージの高さ
image width イメージ名
│ 指定イメージの幅

※部品コマンド
cget
│ オプションの現在値を検索
configure 引数
│ オプションの値を設定
│ 引数なしの場合、全ての値のリストを取り出す
blank
│ イメージの内容を透明にする
get x y
│ 指定した座標のピクセルを0~255の3個組のリストとして返す
put データ -to x1 y1 x2 y2
│ 指定した範囲のイメージを#hhhhhh形式で指定したリストで書き換える。-toを指定しないと原点から、x2, y2を指定してデータが足らない場合は、繰り返す。
copy 名前 オプション
│ 名前で指定される別なイメージをコピー
│ -from x1 y1 x2 y2
│ -to x1 y1 x2 y2
│ -shrink
│  コピー先をコピー範囲にあわせて縮小
│ -zoom x y
│  コピー時に拡大
│ -subsample x y
│  間引き率を指定。マイナス値で左右上下の反転
read ファイル名 オプション
│ -format
│  ファイルから読み込む形式
│ -shrink
│ -from
│ -to
write ファイル名 オプション
│ -format
│  ファイルに書き出す形式
│ -from
redither
│ ディザの再計算

※オプション
-file
│ ファイル名指定
-data
│ ファイルの代わりに文字列より作成
-format
│ イメージ形式(GIFかPPM)
-width
-height
-gamma
│ ガンマ値、デフォルト1、小さいと暗め、
-palette
│ パレット指定
│  N N段階グレースケール
│  Nr/Ng/Nb RBG輝度スケール

_◇bitmap
imageコマンドの種別bitmapでなく、buttonコマンド等のオプションとしてのビットマップである。

※標準ビットマップ
組み込み済の以下のビットマップを使える
│ error
│ gray50
│ gray25
│ hourglass
│ info
│ questhead
│ question
│ warning

※Xのビットマップ形式ファイルを@ファイル名として参照できる。

_◇tk_setPalette

tk_setPalette 背景色
│ 背景色だけ指定、あとはおまかせ
tk_setPalette 指定 色…
│ 指定と色の組み合わせ、背景設定は必須
│ 指定
│  background
│  foreground
│  activeBackground
│  activeForeground
│  disableForeground
│  insertBackground
│  highlightBackground
│  highlightColor
│  troughColor
│  selectBackground
│  selectForeground

_◇tk_bisque
│ tk3.6以前のデフォルトカラースキムに設定

_◇Xウインドウでのフォント指定

-M-F-WG-SL-WI-A-PX-PT-XR-YR-SP-AW-C-E

M メーカー
F フォントファミリ
WG 太さ(medium, bold…)
SL 傾き(r, i, o…)
WI 幅(normal, semicondensed…)
A 付加スタイル
PX ピクセル単位のサイズ
PT ポイントサイズ
XR X解像度
YR Y解像度
SP スペース(p, m…)
AW 平均幅
C 文字セット
E 符号化

※何でもいい部分には「*」を指定できる。

例)
Helvetica、通常の太さ、傾いていない、12pt
│ -*-Helvetica-medium-r-*-12-*


◆配置マネージャ

_◇packer
packコマンドで呼び出す。窓の中に部品をつめ、詰めた部品の配置と大きさを調整しながら窓の大きさ変化。

pack 部品… オプション…
pack configure 部品… オプション…

※オプション
-after 部品
│ 指定部品の直後に詰める
-before 部品
│ 指定部品の直前につめる
-in 部品
│ 指定した部品の子として詰める
-side 方向
│ どちら向きに詰めるか指定
│ -top
│ -bottom
│ -left
│ -right
-anchor 揃え
│ 部品をどこに置くか
│ center
-fill 引き伸ばし
│ 部品を引き伸ばすかどうかの指定
│ both
│ x
│ y
│ none
-ipadx 長さ
-ipady 長さ
│ 最小限の長さに加える詰め物の長さ
-padx 長さ
-pady 長さ
│ 部品の周囲の空白

※部品コマンド
pack forget 部品
│ 画面から消える
pack info 部品
│ 指定部品のオプション群のリストを返す
pack propagate 親部品 on/off
│ 内側を詰めた結果で親部品を広げるかどうか
pack slaves
│ 子の部品群のリストを返す

※詰める対象
親子関係以外に、自分の兄弟レベルの子孫まで詰められる。

_◇placer
窓の大きさには手をつけず、その中に部品を置く。

place 部品 オプション

※オプション
-x, -y ピクセルで位置指定
-relx, -rely 比率で指定 0.5(中央)など
-anchor 位置指定する部品の部位
│ c, n, s, e, w, nw, ne, sw, se
-width, -height 部品幅高ピクセル指定
-relwidth, -relheight 部品幅高比率指定
-in 位置指定の基準部品指定
-bordermode -inのときのボーダ計算法
│ in/out

_◇grid
packerに近いが、部品を升目状に配置できる。
│ 置いた部品数に応じて管理領域を行列に分割する
│ 各領域に部品を入れる(複数領域あり)
│ 領域全体の最小値より親が小さければ拡大
│ 領域全体の最小値より親が大きければ縮小
│ あまっている領域はセルの重みで比例配分

例)
grid configure .b3 -column 1 -row 0 -columnspan 2

grid 部品… オプション…
grid configure 部品… オプション…
│ どちらも同じ

※オプション
-column 番号
-columnspan 数値
-row 番号
-rowspan 数値
-sticky 詰め方、伸ばし方
│ {} 上下中央よせ
│ n/s 上よせ/下よせ
│ e/w 右よせ/左よせ
│ ns 上下引き伸ばし
│ ew 左右引き伸ばし
-ipadx 最小限の長さに加える値
-ipady 最小限の長さに加える値
-padx 周囲余白の値
-pady 周囲余白の値

※部品コマンド
grid columnconfigure 親部品 番号 オプション…
grid rowconfigure 親部品 番号 オプション…
│ 指定した番号の行列についてのオプション
│ -minsize 数値
│ -weight 数値
│ -pad 数値
grid forget 部品
grid remove 部品
grid info 部品
grid propagate 親部品 on/off
grid slaves 部品
grid size 親部品
grid bbox 親部品
grid location 親部品 X座標 Y座標

_◇raise, lower
部品や窓は後から作られたものが上にある規則を変更し、重なり順を操作する

raise 部品
lower 部品
│ 最上位、最下位におく

raise 部品 対象部品
lower 部品 対象部品
│ 対象部品の直上、直下におく


◆ダイアローグボックス

_◇tk_messageBox

例)
tk_messageBox -type ok -message “XXX”

※オプション
-type 種別
│ ok
│ okcancel
│ yesno
│ yesnocancel
│ retrycancel
│ abortretryignore
│ 複数のボタンがあった場合、押されたボタンの名前(小文字)を返す。
-message 文字列
-icon
│ error
│ info
│ question
-default 名前
│ デフォルトで選択されるボタン名
-title 文字列
-parent 窓

_◇tk_dialog
tk_dialog 窓 タイトル メッセージ ビットマップ 番号 文字列 文字列…
│ 窓 窓の名前。同名あれば削除。
│ タイトル タイトル
│ メッセージ 本体メッセージ
│ ビットマップ 本体表示ビットマップ
│ 番号 デフォルトボタンの番号(0基点
│ 文字列 各ボタンのラベル

この手続きは、ボタンの番号を返す。

_◇tk_chooseColor
色選択ダイアローグボックス。色に対応した#RRGGBBという16進文字列を返す。

※オプション
-initialcolor 色指定
-title 文字列
-parent 窓

_◇tk_getOpenFile
ファイル指定ダイアローグを開く。ファイルパス名を返す。

_◇ファイル名選択ダイアローグ
tk_getOpenFile
tk_getSaveFile

※オプション
-initialdir 初期ディレクトリ
-initialfile 初期ファイル名
-defaultextension 拡張子
-filetypes パターンリスト
-title 文字列
-parent 窓

例)パターンリスト
-filetypes {
{“Text” {.txt .text “”}}
{“HTML” {.htm .html}}
{“ALL Files” *}}


◆窓の生成、破壊

_◇toplevel
frameとコマンド、オプションほぼ同じだが、トップレベルの窓を作る

例)
toplevel .t0

※X上でのオプション
-screen hostname:d.s
│ 画面指定

_◇destroy
│ destroy 名前
窓や部品を破棄する


◆ウインドウマネージャ

_◇窓の可視、不可視、アイコン化

wm withdraw 窓
│ 画面からとりのぞく
wm iconify 窓
│ アイコン化する
wm deiconify 窓
│ 見える状態にする
wm state 窓
│ 現在の状態を返す。

wm group 窓 親の窓
│ 窓を親の窓と同じグループにする
wm iconbitmap 窓 ビットマップ
│ アイコンとして表示するビットマップ
wm iconmask 窓 ビットマップ
│ アイコンのマスクとして使うビットマップ
wm iconwindow 窓 アイコン窓
│ アイコンとして表示する窓
wm iconposition 窓 x y
│ アイコン表示位置
wm iconname 窓 文字列
│ アイコンと一緒に表示する文字列

※設定すべき値を指定しないと現在の値を返す

_◇タイトルバー

wm title 窓 文字列
│ 表示文字列指定
wm frame 窓
│ 窓が飾りフレームの中にあればその識別子を、そうでなければ空文字列を返す
wm overrideredirect 窓
│ ウインドウマネージャの管理から外す。(タイトルバーがつかず、位置も制御されない)
wm transient 窓 親の窓
│ 親の窓から一時的に派生した窓とする。

_◇窓の大きさと位置

wm geometry 配置指定
│ 幅x高さ+X位置+Y位置

wm grid 窓 基本幅 幅増分 基本高さ 高さ増分
│ 増分の整数倍で動くグリッドモードになる。引数全てに空文字列を指定するとグリッドモードを脱出する。

wm resizable 窓 真偽値 真偽値
│ 窓の幅と高さをユーザが変更できるようにするなら真
wm minsize 窓 幅 高さ
│ 窓の最小の大きさ。(グリッドモードならグリッド単位)

wm maxsize 窓 幅 高さ
│ 窓の最大の大きさ。(グリッドモードならグリッド単位)

wm aspect 窓 w1 h1 w2 h2
│ 縦横比の最小w1/h1と最大w2/h2

wm positionfrom 窓 指定
│ 指定= user, program

wm sizefrom 窓 指定
│ 指定= user, program

_◇プロパティ

wm client 窓 マシン名
│ WM_CLIENT_MACHINEに指定した名前を設定

wm command 窓 リスト
│ プログラムを起動したコマンド行を示すWM_COMMAND設定

wm protocol 窓 プロパティ コマンド
│ プロパティ
│ WM_DELETE_WINDOW ウインドウ削除
│ WM_SAVE_YOURSELF 状態をファイル保存
│ WM_TAKE_FOCUS 入力フォーカス取得

wm colormapwindows 窓
│ 色割り当て優先順位を示すリストをWM_COLORMAP_WINDOWSに設定

wm focusmodel 窓 モード
│ 入力フォーカスの管理モード
│  active
│  passive
│ 通常はpassive. activeの場合tkのfocusコマンドによる。

_◇ディスプレイ情報の取得
通常は、wishのメイン窓の置かれているディスプレイの情報だが、-displayof 窓というオプションをつけることで、別のディスプレイにある窓の情報を得ることもできる。
winfo atom 名前
│ 名前に対応する整数値を返す

winfo atommane 数値
│ 整数値に対する名前を返す

winfo containing x y
│ 座標x yを含む窓の名前。なければ空文字列。

winfo interps
│ 画面上にあるtcl/tkプログラムのリスト

winfo pathname 番号
│ 窓の識別番号から窓の名前を返す。

_◇窓基本情報取得

winfo id 窓
│ 窓の識別番号

winfo exists 窓
│ その窓の名前があれば1なければ0

winfo class 窓
│ 窓のクラス名(-class オプション)

winfo ismapped 窓
│ 窓がマップされているか

winfo viewable 窓
│ 窓が見える状態かどうか

winfo visible 窓
│ 窓のvisual種別

winfo visualsavailable 窓
│ 窓の置かれている画面のvisual種別と深さの対

_◇窓配置情報取得

winfo geometry 窓
│ 配置を WxH+X+Y 形式で返す
winfo reqheight 窓
│ 要求高さ
winfo reqwidth 窓
│ 要求幅
winfo height 窓
│ 高さ
winfo width 窓
│ 幅
winfo x 窓
│ 親窓内でのX
winfo y 窓
│ 親窓内でのY
winfo rootx 窓
│ ルート上でのX
winfo rooty 窓
│ ルート上でのY
winfo vrootx 窓
│ 仮想ルート上でのX
winfo vrooty 窓
│ 仮想ルート上でのY
winfo vrootwidth 窓
│ 仮想ルート窓の幅
winfo vrootheight 窓
│ 仮想ルート窓の高さ
winfo pixels 窓 距離
│ 指定した距離(mm, cm)が相当するピクセル(整数
winfo fpixels 窓 距離
│ 指定した距離(mm, cm)が相当するピクセル(実数
winfo pointerx 窓
│ マウスのX(画面内に無いときは-1
winfo pointery 窓
│ マウスのY(画面内に無いときは-1
winfo pointerxy 窓
│ マウスのX,Yのリスト

_◇窓間の関係

winfo manager 窓
│ 窓を管理している配置マネージャ
winfo toplevel 窓
│ その窓を含むトップレベルの窓の名前
winfo parent 窓
│ 親の窓の名前
winf children 窓
│ 子の窓の名前

_◇カラー関係情報

winfo colormapful 窓
│ カラーマップが満杯になっているか否か。1 or 0.

winfo cells 窓
│ カラーマップの色数

winfo depth 窓
│ 1ピクセルあたりの色数

winfo rgb 窓 色指定
│ 色指定に対するRGB3値からなるリスト

winfo screen 窓
│ その窓が置かれている画面(X文字列形式)

_◇画面情報
その窓が置かれている画面の情報を返す。

winfo screenvisual 窓
│ Xの画面visual種別

winfo screencells 窓
│ デフォルトカラーマップの色数

winfo screendepth 窓
│ 1ピクセルの色数

winfo screenwidth 窓
│ 画面の幅

winfo screenheight 窓
│ 画面の高さ

winfo screenmmwidth 窓
│ 画面の幅 mm単位

winfo screenmmheight 窓
│ 画面の高さ mm単位

winfo server 窓
│ Xサーバのバージョン、ベンダ情報


◆セレクション、クリップボード

_◇selection

selection clear -displayof 窓 -selection セレクション
│ セレクションをクリアする。省略するとPRIMARYセレクションが使用される。どの画面かを窓で指定する。省略すると「.」が使われる。

selection get -displayof 窓 -selection セレクション -type 種別
│ セレクションの値を取り出す。種別は日本語の場合
│ COMPOUND_TEXT

selection handle -selection セレクション -type 種別 -format 種別 窓 スクリプト
│ 大きなセレクションから、スクリプトにオフセットとバイト数を渡して小刻みに処理できるようにする。

selection own -displayof 窓 -selection セレクション 窓1
│ 窓1をセレクションを所有する窓として指定する。

selection own -displayof 窓 -selection セレクション
│ セレクションを所有する窓を返す。

※通常はPRIMARYセレクションを使う。

※listboxなどは、オプション設定により選択したものが自動的にPRIMARYセレクションになる
│ -exportselection true

_◇clipboard
クリップボードは CLIPBOARD という名前のセレクションを使って実現する。

※クリップボードからの値の取り出しは
│ selection get
がそのまま使える

clipboard clear -displayof 窓
│ 指定した窓に対応する画面のクリップボードをクリアする
clipboard append -displayof 窓 -format 種類 -type 種類 データ
│ クリップボードに内容を追加する。

例)カット(リストボックス.l0に対する)
│ clipboard clear
│ foreach i [.l0 curselection] {
│  clipboard append “[.l0 get $i]\n”
│ }
│ foreach i [lsort -decreasing [.l0 curselection]]{ .l0 delete $i }

例) ペースト
│ set sel [split [selection get -selection CLIPBOARD] “\n”]
│ foreach i $sel { .l0 insert end $i }


◆tk 制御

_◇tkwait
│ 変更もしくはウインドウの消去を待つ。

① tkwait variable name
② tkwait visibility name
③ tkwait window name
│ ウインドウがdestoryされるまで待つ。

_◇tkプログラム間の連携 send

※tk appname 名前
│ sendコマンドで使われるプログラム名を設定する。名前は大文字で始める。

※send オプション アプリケーション名 コマンド
指定したtkアプリケーションの内部で指定コマンドを遠隔実行する。

│ オプション
│  -async 遠隔実行の完了を待たない
│  -displayof 画面
│  tkアプリケーションのある画面

_◇bell
│ ベルを鳴らす

_◇focus
窓のフォーカスを制御する

focus
│ フォーカスを持っている窓を返す
focus 窓
│ 窓にフォーカスを移す
focus -force 窓
│ 他のアプリケーションからフォーカスを横取りして窓に置く

_◇grab
指定した窓にポインタ、キーボードをグラブする。

grab set [-global] 窓

全てのイベントはその窓と子孫のみが受け取れる。-global指定すると他のアプリからもグラブする

grab release 窓
リリースする

grab status 窓

※ウインドウズ上ではgrabできないようだ。。。


◎wish
tcl/tk、GUI使用可能な処理系

※起動方法

wish プログラムファイル [オプション] 引数 …

※オプション
-colormap new
-display ディスプレイ
-geometry 位置指定
-name 名前
-sync

│ オプションの終わり

_◇対話的使用

※historyコマンド
│ コマンド履歴の表示と操作

_◇組み込み変数
tk_library
tk_version
tk_patchlevel
tk_strictMotif
tkPriv
tcl_platform
tcl_pkgPath
tcl_library
tcl_version
tcl_precision
tcl_rcFileName
env
errorCode
errorInfo


◎サンプルプログラム

◆イベントハンドラ

canvas .c0 -width 200 -height 150
pack .c0
.c0 create rectangle 10 10 20 20 -fill brown -tags brown
.c0 create rectangle 20 10 30 20 -fill brown -tags brown
.c0 create rectangle 30 10 40 20 -fill brown -tags brown
.c0 bind brown <B1-Motion> {
  set x1 [expr %x-5]
  set x2 [expr %x+5]
  set y1 [expr %y-5]
  set y2 [expr %y+5]
  .c0 coords current $x1 $y1 $x2 $y2
}

canvas .c0 -width 200 -height 150
pack .c0
set r1 [.c0 creat rect 10 10 20 20 -fill brown]
.c0 bind $r1 <B1-Motion> {
  set x1 [expr %x-5]
  set y1 [expr %y-5]
  set x2 [expr %x+5]
  set y2 [expr %y+5]
  .c0 coords current $x1 $y1 $x2 $y2
}

◆グラフィクス

canvas .c0 -width 200 -height 150
pack .c0
set p0 [.c0 create polygon 0 0 10 1 20 20 -fill blue]
foreach i {1 2 3 4 5} {
  set x1 [expr $i * 20]
  set x2 [expr $i * 20 + 10]
  set rects($i) [.c0 create rect $x1 $x1 $x2 $x2 -fill brown]
  .c0 bind $rects($i) <B1-Motion> "rectmotion %x %y"
}
proc rectmotion { x y } {
  set x1 [expr $x-5]
  set y1 [expr $y-5]
  set x2 [expr $x+5]
  set y2 [expr $y+5]
  .c0 coords current $x1 $y1 $x2 $y2
  updatepoly
}
proc updatepoly { } {
  global p0 rects
  set com ".c0 coords $p0"
  foreach i { 1 2 3 4 5 } {
    set com [linsert $com end [expr [lindex [.c0 coords $rects($i)] 0] + 5]]
    set com [linsert $com end [expr [lindex [.c0 coords $rects($i)] 1] + 5]]
  }
  eval $com
}
updatepoly

◆キャンバス上のテキスト

#
canvas .c0 -width 200 -height 150
pack .c0
bind .c0 <Button-2> ".c0 scan mark %x %y"
bind .c0 <B2-Motion> ".c0 scan dragto %x %y"
bind .c0 <Control-Button-1> "newtext %x %y"
bind .c0 <Control-Key-q> "exit"
#
proc newtext {x y} {
  set id [.c0 create text [.c0 canvasx $x] [.c0 canvasy $y] -text ""]
  .c0 bind $id <KeyPress> "keytext $id %A"
  .c0 bind $id <Button-1> "picktext $id %x %y"
  .c0 bind $id <Shift-Button-1> "adjusttext $id %x %y"
  .c0 bind $id <Shift-B1-Motion> "adjusttext $id %x %y"
  picktext $id $x $y
}
proc picktext {id x y} {
  focus .c0
  .c0 focus $id
  .c0 icursor $id @[.c0 canvasx $x],[.c0 canvasy $y]
  .c0 select from $id insert
}
proc adjusttext {id x y} {
  focus .c0
  .c0 focus $id
  .c0 select adjust $id @[.c0 canvasx $x],[.c0 canvasy $y]
  .c0 icursor $id sel.first
}
proc keytext { id c } {
  if { $c == "\n" || $c == "\r" } {
    focus .
  } elseif { $c == "\x02" } {
    .c0 icursor $id [.c0 index $id insert] - 1]
  } elseif { $c == "\x06" } {
    .c0 icursor $id [.c0 index $id insert] + 1]
  } elseif { $c == "\b" || $c == "\x7f" } {
    if { $id == [.c0 select item] } {
      .c0 dchars $id sel.first sel.last
    } else {
      .c0 dchars $id [expr [.c0 index $id insert] - 1]
    }
  } elseif { $c == "\x1c" } {
    global str
    kanjiInput start .c0 -variable str
    tkwait variable str
    kanjiInput end .c0
    .c0 insert $id insert $str
  } elseif { $c >= " " && $c <= "~" } {
    .c0 insert $id insert $c
  }
}

◆テキストウインドウ

text .t0 -width 80 -height 10 -xscrollcommand ".s2 set" -yscrollcommand ".s1 set" -font "FixedSys"
scrollbar .s1 -orient vertical -command ".t0 yview"
scrollbar .s2 -orient horizontal -command ".t0 xview"
frame .f0
menubutton .b0 -text "File" -menu .b0.m0
menubutton .b3 -text "Edit" -menu .b3.m0
menubutton .b1 -text "Scripts" -menu .b1.m0
menubutton .b4 -text "DataBase" -menu .b4.m0
menubutton .b2 -text "Help" -menu .b2.m0
pack .b0 .b3 .b1 .b4 .b2 -in .f0 -side left
grid .f0 -row 0 -column 0 -columnspan 2 -sticky ew
grid .t0 -row 1 -column 0 -sticky nsew
grid .s1 -row 1 -column 1 -sticky ns
grid .s2 -row 2 -column 0 -sticky ew
grid rowconfigure . 1 -weight 100
grid columnconfigure . 0 -weight 100