💻

Tcl Programming Note

2024/01/07に公開

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