“无限循环”之后:永远不会进入主循环

时间:2012-08-20 19:15:52

标签: python event-handling tkinter tetris

这是我的第一篇文章。我在两个月前考虑职业交换时开始编码,正在研究俄罗斯方块克隆。我已经实现了大部分核心功能,但无法通过后循环让游戏不断刷新。

我正在使用Tkinter来制作我的Gui并且正在尝试面向事件的编程。

我的理解是来自after(Time, Event)的{​​{1}}应安排在Tkinter指定的延迟后Event回调函数发生的任何事情。我认为代码应该在此之后继续执行后续项目。

我的帧刷新功能(Time)完成了俄罗斯方块工作的大部分必要事件,然后使用after调用自身。初始化游戏实例时我会调用一次。

game.updateBoard()函数无限期地通过mainloop()调用自身,而不是继续game.updateboard()

我怀疑它的表现并不像我认为after的工作方式,即在指定的延迟发生之前继续执行脚本。我认为它正在等待回调终止继续。

我试图在此找到一个资源,但不能。

如果您有解决此问题,附带代码或一般编码的建议,我很高兴听到它们!这是一个学习过程,我很乐意尝试你提出的任何建议。

以下是代码的相关部分:

after

1 个答案:

答案 0 :(得分:17)

您想要self.frame.after(500, self.updateBoard)

这里的区别很微妙,(self.updateBoard而不是self.updateBoard())。在您的版本中,您将函数的结果传递给after方法,而不是传递函数。这会导致您描述的无限递归。