关于tkinter.messagebox中default参数正确取值的技术咨询
Tkinter messagebox default参数正确取值说明
你遇到的问题核心是选了和对话框按钮不匹配的default参数值:
askokcancel这个对话框只有「OK」和「Cancel」两个按钮,所以default参数只能指定这两个选项,不能用yes或者tk.YES——因为这个对话框里根本没有Yes按钮,Tcl解释器自然会报错。
不同对话框对应的有效default取值:
askokcancel:仅支持"ok"或"cancel"askyesno/askyesnocancel:支持"yes"、"no"(后者还可加"cancel")askretrycancel:支持"retry"或"cancel"showerror/showinfo/showwarning:默认只有OK按钮,无需指定default
修正后的示例代码:
import tkinter as tk import tkinter.messagebox as messagebox root = tk.Tk() def confirmExit(): # 正确指定default为"ok"或"cancel" mbox = messagebox.askokcancel("Quit", "Shut down?", icon="question", default="ok") if mbox: root.destroy() root.protocol('WM_DELETE_WINDOW', confirmExit) root.mainloop()
错误原因补充:
- 错误1里用
"yes",但askokcancel没有这个按钮,Tcl环境不识别,直接报错; - 错误2里用
tk.YES,它对应的是数值1,而Tcl要求的是字符串格式的按钮名称(比如"ok"),所以也会触发错误。
内容的提问来源于stack exchange,提问作者Sun Bear
相关产品推荐
相关产品推荐

