我想要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
}
答案 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替换全局变量。