首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >事件在环化tkinter python3期间发生。

事件在环化tkinter python3期间发生。
EN

Stack Overflow用户
提问于 2013-10-01 17:03:25
回答 1查看 71关注 0票数 0

我正在用tkinter编程一个小游戏,我需要在主要动画期间得到事件。我的年轮是这样的无限循环:

代码语言:javascript
运行
复制
def animation(self):
   while 1:
      ...
      ...
      ...
      self.view.get_canvas().uptdate()
      self.view.get_canvas().after(20)

我用bind函数做了2次测试,第一次是:

代码语言:javascript
运行
复制
self.main_canvas.bind("<Button-1>", print)

在本例中,当我单击画布时,事件将打印在终端上,因此,我实现了在无限循环期间检测到事件。

第二次测试:

代码语言:javascript
运行
复制
self.main_canvas.bind("<Button-1>", sys.exit)

在这种情况下,当我点击画布时,什么都没有发生。看上去很奇怪

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

谢谢你的阅读

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-01 19:00:34

您不应该使用无限循环来制作动画。图形用户界面已经有一个无限循环运行-- mainloop。您的循环正在阻止主循环处理事件。

做动画的正确方法是编写一个函数来完成一个框架。然后,让该函数使用after调用自己。

代码语言:javascript
运行
复制
def animation(self):
    ...
    <redraw the scene>
    ...
    self.after(20, self.animation)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19121958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档