💻
Tcl Programming Note
Snippet
Tk
ウィンドウの終了処理
wm protocol . WM_DELETE_WINDOW "command"
Grid
grid columnconfigure <window> 0 -weight 1
grid rowconfigure <window> 0 -weight 1
Text
<window> tag configure タグ -foreground red
<window> insert 位置 文字列 タグ
TkDND
TkDNDは使用するバージョンで使用法が異なるので注意する。
V1
package require tkdnd
dnd bindtarget $widget text/uri-list <drop> "drop %A %T %D"
proc drop { action type data } {
}
V2
package require tkdnd
tkdnd::drop_target register $widget {DND_Text DND_Files}
# DND_Text は文字等のドラッグ、DND_Files はファイルパスのドラッグに対応
bind $widget <<Drop:DND_Files>> "drop %D"
proc drop { data } {
}
TclOO
package require TclOO
oo::class create CA {
variable m_name
constructor args {
set m_name "No name"
# 自オブジェクトの変数を指定する
pack [label .e -textvariable [my varname m_name]]
}
destructor {
}
# メソッドは小文字で始まるとpublic扱い
method name { name args } {
if {[llength $args] > 0} {
set m_name [lindex $args 0]
# 自クラスのメソッドを呼び出す場合は、[self]を指定
[self] update
}
return $m_name
}
method update { } {
# update
}
}
oo::class create CB {
# 継承
superclass CA
# 継承元から使いたい変数を定義
variable m_name
}
# オブジェクト作成
set obj [CB new]
TEA
Photo - 画像データの入れ替えと更新
// gets image handle.
Tk_PhotoHandle pHandle = Tk_FindPhoto(interp, imageName);
if (pHandle == 0) {
Tcl_AppendResult(interp, "could not image[", imageName, "] information.", 0);
return TCL_ERROR;
}
// gets image block from handle.
Tk_PhotoImageBlock block
Tk_PhotoGetImage(pHandle, block);
/*
block.width, block.height, block.pitch, block.pixelSize,
block.pixelPtr
block.offset[0], block.offset[1], block.offset[2], block.offset[3]
*/
// pixel manipulation
// put block to handle.
Tk_PhotoPutBlock(interp, dhandle, &dblock, 0, 0, dblock.width, dblock.height, TK_PHOTO_COMPOSITE_SET);
// update
const Tk_ImageType* imgType = 0;
ClientData imgdata = Tk_GetImageMasterData( interp, imageName, &imgType );
Tk_ImageMaster* master = (Tk_ImageMaster*)imgdata;
Tk_ImageChanged(*master, 0, 0, block.width, block.height, block.width, block.height);
Discussion