0

我正在用 tkinter 编写一个小游戏,我需要在主动画期间获取事件。我的动画是一种像这样的无限循环:

def animation(self):
   while 1:
      ...
      ...
      ...
      self.view.get_canvas().uptdate()
      self.view.get_canvas().after(20)

我用绑定函数做了 2 次测试,第一个:

self.main_canvas.bind("<Button-1>", print)

在这种情况下,当我点击我的画布时,事件会打印在终端上所以,我意识到在无限循环期间检测到事件

第二次测试:

self.main_canvas.bind("<Button-1>", sys.exit)

在这种情况下,当我单击画布时,什么也没有发生。看起来很奇怪

我的问题是:为什么“打印”有效而 sys.exit 无效?为什么“打印”有效,但我的“自制”功能无效?如何在动画期间执行我自己的功能?

谢谢阅读

4

1 回答 1

1

您不应该使用无限循环制作动画。GUI 已经有一个无限循环正在运行—— mainloop。您的循环正在阻止 mainloop 能够处理事件。

做动画的正确方法是写一个只做一帧的函数。然后,使用该函数调用自身after

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

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

于 2013-10-01T19:00:34.877 回答