动画tkinter python 3期间的事件

时间:2013-10-01 17:03:25

标签: python events animation python-3.x tkinter

我正在使用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不工作?   为什么“打印”有效但我的“自制”功能不起作用?   如何在动画期间执行我自己的功能?

感谢您阅读

1 个答案:

答案 0 :(得分:1)

你不应该用无限循环做动画。 GUI已经运行了无限循环 - mainloop。你的循环阻止了mainloop能够处理事件。

做动画的正确方法是编写一个执行一帧的功能。然后,让该函数使用after调用自身:

def animation(self):
    ...
    <redraw the scene>
    ...
    self.after(20, self.animation)

这样,所有事件都将在每帧之间的20毫秒内处理。