TK事件


事件是最簡單的形式與命令的互動處理過程。一個簡單的例子,事件處理-按鈕事件,如下圖所示。

#!/usr/bin/wish

proc myEvent { } {
puts "Event triggered"
}
pack [button .myButton1  -text "Button 1"   -command myEvent]

當我們執行上面的程式,會得到下面的輸出。

Event Example

一個簡單的程式,以顯示延遲的文字動畫事件如下所示。

#!/usr/bin/wish

proc delay {} {
 for {set j 0} {$j < 100000} {incr j} {
   } 
}
label .myLabel -text "Hello................" -width 25
pack .myLabel
set str "Hello................"
for {set i [string length $str]} {$i > -2} {set i [expr $i-1]} {
   .myLabel configure -text [string range $str 0 $i]
   update
   delay
}

當我們執行程式,會得到動畫如下面的輸出。

Event Example3

延後事件

延後事件的語法如下所示。

after milliseconds number command

一個簡單的程式,以顯示如下圖所示延遲事件之後。

#!/usr/bin/wish

proc addText {} {
 label .myLabel -text "Hello................" -width 25
 pack .myLabel
}
after 1000 addText

當我們執行程式,將在一秒鐘後得到以下輸出。

Event Example2

可以在使用後,取消命令,如下圖所示取消的事件。

#!/usr/bin/wish

proc addText {} {
 label .myLabel -text "Hello................" -width 25
 pack .myLabel
}
after 1000 addText
after cancel addText

事件系結

事件系結的語法如下所示。

bind arguments 

鍵盤事件的例子

#!/usr/bin/wish

bind .  {puts "Key Pressed: %K "}

當我們執行程式,並按下一個字母X,會得到下面的輸出。

Key Pressed: X 

滑鼠事件的例子

#!/usr/bin/wish

bind .  {puts "Button %b Pressed : %x %y "}

當我們執行程式,並按下滑鼠左鍵,會得到類似以下的輸出。

Button 1 Pressed : 89 90 

具有按鈕事件例如連結

#!/usr/bin/wish

proc myEvent { } {
puts "Event triggered"
}
pack [button .myButton1  -text "Button 1"   -command myEvent]
bind .  ".myButton1 invoke"

當我們執行程式,然後按回車,會得到下面的輸出。

Event triggered