我正在用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却不行?为什么“打印”有效,而我的“自制”功能却不行?如何在动画期间执行我自己的功能?
谢谢你的阅读
发布于 2013-10-01 19:00:34
您不应该使用无限循环来制作动画。图形用户界面已经有一个无限循环运行-- mainloop
。您的循环正在阻止主循环处理事件。
做动画的正确方法是编写一个函数来完成一个框架。然后,让该函数使用after
调用自己。
def animation(self):
...
<redraw the scene>
...
self.after(20, self.animation)
这样,所有事件都将在每个帧之间的20毫秒内处理。
https://stackoverflow.com/questions/19121958
复制相似问题