Tcl 如何在动画期间输入关键点

Tcl 如何在动画期间输入关键点,tcl,tk,Tcl,Tk,我想1。在输入窗口小部件中输入关键点,同时在画布和2上设置图像动画。按下enter键后开始一个过程。下面您可以看到我到现在为止所做的事情。此外,我还试了几件事 bind . "<Key>" "onKeyPressed %K" bind。“”“onKeyPressed%K” 但是,在动画完成并且应用程序在动画期间不响应enter键之前,关键点不会出现。 我必须使用Tcl_CreateTimerHandler来解决问题吗? 你能帮我一个忙吗?提前感谢。 奥利弗 #/usr/bin/w


我想
1。在输入窗口小部件中输入关键点,同时在画布和
2上设置图像动画。按下enter键后开始一个过程。
下面您可以看到我到现在为止所做的事情。此外,我还试了几件事

bind . "<Key>" "onKeyPressed %K"
bind。“”“onKeyPressed%K”
但是,在动画完成并且应用程序在动画期间不响应enter键之前,关键点不会出现。
我必须使用Tcl_CreateTimerHandler来解决问题吗?

你能帮我一个忙吗?提前感谢。
奥利弗

#/usr/bin/wish
proc ImageMove{Image}{
.可以移动$Image 1 0
}
wm标题。“演示”
wm几何+300+300
entry.en-Text变量文本
图像创建照片MyImage-文件“pic.ppm”
帆布罐-高200-宽300
设置MyImage2[.可以创建图像0 0-锚定nw-图像MyImage]
打包
打包,可以吗

对于{set i 0}{$i我不能完全确定,但是
update idletask
只处理计划在下一空闲时间运行的事件。如果您只使用
update
,问题可能会消失

<>但是这不是好的编码风格。在TK应用程序中只应该有短的运行函数,而调用UPDATE有它自己的问题,因为您不能知道在Pro .P/P的中间调用什么其他函数。 我建议这样做:

proc animator {cnt lim} {
   global MyImage2
   ImageMove $MyImage2
   if {$cnt < $lim} then {
     after 100 animator [incr cnt] lim
   }
}

animator 0 100
proc animator{cnt lim}{
全球MyImage2
ImageMove$MyImage2
如果{$cnt<$lim},则{
100后动画师[incr cnt]lim
}
}
动画师0100
还请注意,参数cnt的使用是全局变量的替换

proc animator {cnt lim} {
   global MyImage2
   ImageMove $MyImage2
   if {$cnt < $lim} then {
     after 100 animator [incr cnt] lim
   }
}

animator 0 100