鱼C论坛

 找回密码
 立即注册
查看: 1677|回复: 5

[已解决]Tkinter : mainloop() 与 root.mainloop()

[复制链接]
发表于 2023-6-26 11:17:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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: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()`,因为它可以更清楚地指出错误的原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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()来确保窗口仍然响应用户的输入和事件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()`,因为它可以更清楚地指出错误的原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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()

目前情况,这个程序报错 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-26 12:51:00 | 显示全部楼层
dragov 发表于 2023-6-26 11:32
目前情况,这个程序报错 ?
root.destroy()
你窗口没了你还想 mainloop?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-26 15:52:55 | 显示全部楼层

哦,似乎理解了一点,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表