Tkinter:正确使用root.after()

时间:2017-01-15 13:05:20

标签: python tkinter

我想制造一个射弹,每秒沿y轴移动10个像素 使用after()函数。 我做的第一次尝试是:

  def muovi(self, root):
    i = 0
    while i < 10:
        i += 1
        self.parent.move(self.colpo, 0, 10)
        root.after(1000)

问题在于它完全忽略 self.parent.move(self.colpo,0,10) ,仅适用于循环结束。 然后我尝试了这个:

    def muovi(self, root):
        self.parent.move(self.colpo, 0, 10)
        root.after(1000, self.muovi(root))

这次代码运行就像是代替 root.after(1000,self.muovi(root))那里有 self.muovi(root)),所以我立刻得到递归错误

如何让 root.after()正常工作?

2 个答案:

答案 0 :(得分:1)

你的第一段代码不起作用,因为你没有指定在1000毫秒后调用的函数。

你的第二段代码不起作用,因为define所期望的第二个参数是一个函数,就像按钮的undefined选项一样。

以下是一个例子:

after

答案 1 :(得分:1)

此代码:

root.after(1000, self.muovi(root))

在功能上与此代码完全相同:

result = self.muovi(root)
root.after(1000, result)

你看到了问题吗?您致电 self.muovi并将结果提供给after。相反,您必须向self.muovi提供引用。其他位置参数可用作参考后面的参数:

root.after(1000, self.muovi, root)