dragov 发表于 2023-6-26 11:17:50

Tkinter : mainloop() 与 root.mainloop()


from tkinter import *
root=Tk()
root.geometry("400x400")
print("2023年第一季度")
root.title("123456789")
print("2023年第二季度")
mainloop()

这个程序的最后一句是 mainloop() 运行正常。

但是,当程序中添加一句:root.destroy() 后,程序就会报错,则必须将最后一句改为 root.mainloop()

那么,mainloop()与root.mainloop() 有何区别 ?

叼辣条闯世界 发表于 2023-6-26 11:26:31

mainloop()和root.mainloop()在Tkinter中有着相似的功能,它们都是用于启动应用程序的主事件循环。主要的区别在于语法和使用方式上。

mainloop():是一个直接调用的函数,它是Tkinter模块的一部分,可以单独使用。它的作用是进入Tkinter的事件循环,处理用户的交互和事件响应。当调用mainloop()时,程序会持续监听用户的输入和事件,直到窗口被关闭或者显式地调用了root.quit()。

root.mainloop():是指对象root的方法,通常是一个Tk或者Toplevel的实例对象。root.mainlopp()与单独调用mainloop()是等价的,都用于启动主事件循环。在创建并配置了应用程序的窗口后,通过调用root.mainloop()来运行应用程序,并且保持窗口显示和功能正常工作的状态。这个方法会一直运行,直到窗口被关闭或者被其他代码显式地停止。

因此,如果你在调用root.destroy()之后仍然想保持窗口的显示,你需要使用root.mainloop()来确保窗口仍然响应用户的输入和事件。

isdkz 发表于 2023-6-26 11:30:40

`mainloop()` 和 `root.mainloop()` 在实际功能上是一样的。它们都是 Tkinter GUI 应用的事件循环,负责监听并响应各种事件,如键盘、鼠标事件等。

以下是这两者的详细解释:

1. `mainloop()`: 在 Tkinter 中,每一个程序都有且只有一个主循环,即 mainloop。它是事件处理的无限循环。当调用 `mainloop()` 时,就是开始了 Tkinter 的事件循环。此方法应该被窗口部件调用,它将持续到所有的窗口部件都被销毁。使用 `mainloop()`,我们可以在不指定具体窗口对象的情况下启动事件循环。

2. `root.mainloop()`: root 是我们创建的一个 Tk 的实例,调用它的 `mainloop()` 方法也可以启动事件循环。实际上,`root.mainloop()` 和 `mainloop()` 在功能上是一样的。不过,`root.mainloop()` 更明确地表示我们正在针对特定的窗口实例启动事件循环。

至于 `root.destroy()`,它是用于销毁窗口的。当你调用了 `root.destroy()` 后,尝试在销毁后的窗口上调用 `mainloop()`,就会出现错误。这是因为你正在尝试在一个已经被销毁的窗口上启动事件循环。在这种情况下,使用 `root.mainloop()` 更为合适,因为它更明确地指出了你正在尝试启动已被销毁的窗口的事件循环,这就是出错的原因。

总结,`mainloop()` 和 `root.mainloop()` 在功能上并没有什么不同,它们都用于启动 Tkinter 的事件循环。不过,当你在窗口被销毁后尝试启动事件循环时,应该使用 `root.mainloop()`,因为它可以更清楚地指出错误的原因。

dragov 发表于 2023-6-26 11:32:54

叼辣条闯世界 发表于 2023-6-26 11:26
mainloop()和root.mainloop()在Tkinter中有着相似的功能,它们都是用于启动应用程序的主事件循环。主要的区 ...


from tkinter import *
root=Tk()
root.geometry("400x400")
print("2023年第一季度")
root.title("123456789")
root.destroy()
print("2023年第二季度")
mainloop()

目前情况,这个程序报错 ?

歌者文明清理员 发表于 2023-6-26 12:51:00

dragov 发表于 2023-6-26 11:32
目前情况,这个程序报错 ?

root.destroy()
你窗口没了你还想 mainloop?

dragov 发表于 2023-6-26 15:52:55

歌者文明清理员 发表于 2023-6-26 12:51



哦,似乎理解了一点,谢谢
页: [1]
查看完整版本: Tkinter : mainloop() 与 root.mainloop()