我正在尝试制作一个程序,正如您可能已经猜到的,我正在使用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()方法,这些方法允许您计划在事件循环的未来迭代中执行的任务。

10-06 09:05