我正在尝试制作一个程序,正如您可能已经猜到的,我正在使用tkinter
。我从这个网站上的其他问题中看到tk.mainloop()
包含root.update_idletasks()
和root.update()
。我也知道它会阻塞,并且在它之后我不能在main()
中运行任何东西。也许穿线是解决办法,但我宁愿现在还不去想。我的第一个想法是,我应该放弃tk.mainloop()
,而将这两种方法包含在我自己的mainloop()
中。
但是,我遇到了一个小问题。我有一些任务可以用按钮来开关。当这些任务运行时,如果我关闭窗口,它将崩溃。如果没有,它将优雅地关闭。为什么它会崩溃并不那么重要(主要是因为我不在乎它在关闭时是否会崩溃,因为用户已经完成了),但它确实告诉我,除了:
def mainloop(self):
while true
self.update()
self.update_idletasks()
从我所看到的情况来看,我推测tkinter的某些部分被集成到了解释器中(或者其他一些胡说八道的东西,这意味着我不能直接进去读它)。因此,我的问题是:
mainloop()
究竟做什么?tkinter.tk.mainloop()
参数是否可以运行多次?如果是这样的话,仅仅在我定义的方法中运行一次迭代,它本身就是一个循环,会不会有什么问题?如果
n
不是迭代,它是什么?是否有任何内置方法可以添加要执行每个循环的任务? 最佳答案
Tkinter的实际功能都不是用Python实现的;Python端只是嵌入式Tcl语言解释器的一个接口,而Tk实际上就在这个接口上。因此,似乎不太可能用Python编写的任何内容替换mainloop()
。
幸运的是,没有理由-Tkinter提供after()
和after_idle()
方法,这些方法允许您计划在事件循环的未来迭代中执行的任务。