我正在使用tkinter编写一个小游戏,我需要在主动画期间获取事件。我的动画是一种无限循环:
def animation(self):
while 1:
...
...
...
self.view.get_canvas().uptdate()
self.view.get_canvas().after(20)
我用bind函数进行了2次测试,第一次测试:
self.main_canvas.bind("<Button-1>", print)
在这种情况下,当我点击我的画布时,事件将打印在终端上 所以,我意识到在无限循环期间检测到事件
第二次测试:
self.main_canvas.bind("<Button-1>", sys.exit)
在这种情况下,当我点击画布时,什么也没发生。 看起来很奇怪
我的问题是: 为什么“打印”工作和sys.exit不工作? 为什么“打印”有效但我的“自制”功能不起作用? 如何在动画期间执行我自己的功能?
感谢您阅读
答案 0 :(得分:1)
你不应该用无限循环做动画。 GUI已经运行了无限循环 - mainloop
。你的循环阻止了mainloop能够处理事件。
做动画的正确方法是编写一个执行一帧的功能。然后,让该函数使用after
调用自身:
def animation(self):
...
<redraw the scene>
...
self.after(20, self.animation)
这样,所有事件都将在每帧之间的20毫秒内处理。