之后应调用什么小部件?

时间:2019-09-16 23:24:00

标签: python python-3.x tkinter

我正在使用after创建延迟的回调。我注意到,尽管许多不同的对象都有一个after方法,但尚不清楚在说aftertk.Frame上调用tk.Button之间是否有区别。 / p>

无论您调用了什么对象after,都可以期待完全相同的行为,所以我没有看到任何指南。看一下实现,似乎它只是在一个通用的窗口小部件基类中委托self.tk.call('after', ms, name),但这本身并不意味着所有子类的行为都相同。

如果我需要打电话给after时手头有多个小部件,那么是否有理由选择一个小部件,还是可以期望完全相同的行为?

1 个答案:

答案 0 :(得分:3)

  

我正在使用after创建延迟的回调。我注意到,尽管许多不同的对象都有after方法,但尚不清楚在对after调用tk.Frame或tk.Button之间是否有区别。

不,没有区别。您可以使用任何所需的小部件来调用const apiCall = new Promise(resolve => { setTimeout(() => { resolve('Data here') }, 1000) }) const asyncFunction = async () => { const result = await apiCall console.log(result) } asyncFunction(),它的行为将完全相同。

  

看一下实现,似乎它只是在一个通用的小部件基类中委托给self.tk.call('after',ms,name),但这并不意味着行为是相同的对于所有子类。

实际上,是的。您将其称为小部件上的方法的事实是Tkinter实现的一个产物。在底层的tcl / tk库中,它只是一个函数调用,与任何小部件无关。