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