Updated 2012-08-28 21:22:33 by AMG

This is a sample implementation of tkevent, as specified in an upcoming TIP.
proc tkevent_cmd {cmd ev} {
    {*}$cmd [dict filter $ev script {k v} {expr {$v != "??"}} ]
}

set tkevent_dict {
        -serial %#       -above %a        -button %b
        -count %c        -detail %d       -focus %f
        -height %h       -windowid %i     -keycode %k  
        -mode %m         -override %o
        -place %p        -state %s        -time %t
        -width %w        -x %x            -y %y
        -character %A    -borderwidth  %B -delta %D
        -sendevent %E    -keysym %K       -keysym_num %N
        -property %P     -root %R         -subwindow %S
        -type %T         -window %W       -rootx %X
        -rooty %Y}

proc tkevent {wid evt cmd} {
    bind $wid $evt [list tkevent_cmd $cmd [concat event $evt $::tkevent_dict]]
}

Example:
label .l -text "Press me"
pack .l
tkevent .l <1> callback
proc callback {e} {
    puts "event x is is [dict get $e -x]"
}