如何在动画期间输入键

时间:2014-10-22 20:14:05

标签: tcl tk


我想要1。在图片在画布上动画时,在条目窗口小部件中输入键,然后单击2。按下回车键时开始一个程序。
下面你可以看到我到现在为止做了什么。另外我用

尝试了几件事
bind . "<Key>" "onKeyPressed %K"

但是在动画完成之前键不会出现,并且应用程序在动画期间不响应输入键。
我是否必须使用Tcl_CreateTimerHandler来解决问题?

请你帮个忙吗?提前谢谢。
奥利弗

#!/usr/bin/wish
proc ImageMove {Image} {
  .can move $Image 1 0
}

wm title . "Demo" 
wm geometry . +300+300
entry .en -textvariable Text
image create photo MyImage -file "pic.ppm"
canvas .can -height 200 -width 300
set MyImage2 [.can create image 0 0 -anchor nw -image MyImage]
pack .en
pack .can

for {set i 0} {$i<=100} {incr i} {
  ImageMove $MyImage2
  update idletask
  after 100
}

1 个答案:

答案 0 :(得分:1)

我对此并不完全确定,但update idletask仅处理计划在下一个空闲时间运行的事件。如果你只使用update,也许你的问题就会消失。

但这不是好的编码风格。您应该只在Tk应用程序中具有短期运行功能。调用更新有它自己的问题,因为你无法知道在proc过程中可能调用的其他函数。

我建议这样的事情:

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

animator 0 100

还要注意使用参数cnt替换全局变量。