鱼C论坛

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

[已解决]py3无法识别messagebox

[复制链接]
发表于 前天 18:59 | 显示全部楼层 |阅读模式

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

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

x
from tkinter import *

messagebox.askokcancel('pratice','去逛街?')

mainloop()
                                               

运行上述代码报如下错误:
Traceback (most recent call last):
  File "D:/program/python_code/tk_meassage.py", line 3, in <module>
    messagebox.askokcancel('pratice','去逛街?')
NameError: name 'messagebox' is not defined
最佳答案
前天 18:59
在使用 messagebox 的时候,你需要单独导入 tkinter.messagebox。可以这样修改你的代码:
from tkinter import *
from tkinter import messagebox

messagebox.askokcancel('pratice','去逛街?')

mainloop()

请确保你的代码中导入了 tkinter.messagebox,然后就可以正常运行这个程序了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 前天 18:59 | 显示全部楼层    本楼为最佳答案   
在使用 messagebox 的时候,你需要单独导入 tkinter.messagebox。可以这样修改你的代码:
from tkinter import *
from tkinter import messagebox

messagebox.askokcancel('pratice','去逛街?')

mainloop()

请确保你的代码中导入了 tkinter.messagebox,然后就可以正常运行这个程序了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 19:03 | 显示全部楼层
FishC 发表于 2025-3-1 18:59
在使用 messagebox 的时候,你需要单独导入 tkinter.messagebox。可以这样修改你的代码:

修改上述代码, 可以弹出对话框, 但是点击对话框中“确定”按钮的时候, 会报如下错误:
Traceback (most recent call last):
  File "D:/program/python_code/tk_meassage.py", line 7, in <module>
    mainloop()
  File "D:\program\Python\Python312\Lib\tkinter\__init__.py", line 653, in mainloop
    _get_default_root('run the main loop').tk.mainloop(n)
  File "D:\program\Python\Python312\Lib\tkinter\__init__.py", line 323, in _get_default_root
    raise RuntimeError(f"Too early to {what}: no default root window")
RuntimeError: Too early to run the main loop: no default root window
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 19:03 | 显示全部楼层
鬼少 发表于 2025-03-01 19:03
FishC 发表于 2025-3-1 18:59
在使用 messagebox 的 ...


这个错误是因为在调用 mainloop() 时,没有默认的根窗口。你需要创建一个 Tk 根窗口。下面是修改后的完整代码:
from tkinter import *
from tkinter import messagebox

root = Tk()
root.withdraw()  # 隐藏主窗口

messagebox.askokcancel('pratice', '去逛街?')

root.mainloop()

这段代码中,我们先创建一个隐藏的 Tk 根窗口 (root.withdraw()),然后再调用 messagebox.askokcancel() 方法,最后运行 root.mainloop()

这样,当你点击对话框中的“确定”按钮时,就不会再出现错误了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 19:04 | 显示全部楼层
鬼少 发表于 2025-3-1 19:03
修改上述代码, 可以弹出对话框, 但是点击对话框中“确定”按钮的时候, 会报如下错误:
Traceback (mo ...

需要添加 root=TK()语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 19:04 | 显示全部楼层
鬼少 发表于 2025-03-01 19:04
鬼少 发表于 2025-3-1 19:03
修改上述代码, 可以弹 ...


是的,你需要创建一个 Tk 根窗口,这样才能避免运行时错误。以下是修改后的代码:
from tkinter import *
from tkinter import messagebox

root = Tk()
root.withdraw()  # 隐藏主窗口

messagebox.askokcancel('practice', '去逛街?')

root.mainloop()

这样可以确保弹出对话框并正常工作。解决方案中使用 root.withdraw() 来隐藏默认的 Tk 主窗口,仅显示消息对话框。请运行这段代码来查看效果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-3 22:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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