更改tkinter消息框按钮上的文字

10
我���在使用tkinter的"askokcancel"消息框向用户发出警告,弹出一个窗口,提示该操作是不可逆的。
from tkinter import Tk
Tk().withdraw()
from tkinter.messagebox import askokcancel
askokcancel("Warning", "This will delete stuff")

我希望将“OK”按钮的文本(从“OK”)更改为类似“删除”的内容,以使其看起来不那么良善。

这可能吗?

如果不行,有没有其他方法可以实现?最好不要引入任何依赖项...


可能是可行的,但我不建议这样做。为什么不使用SimpleDialog呢? - Johnny
这似乎是不可能的。 - This isn't my real name
@Johnny:实际上,我之前过早地放弃了tkinter.simpledialog,因为它看起来比messagebox不够灵活。在simpledialog中是否可以覆盖按钮文本? - Emilio M Bumachar
这是不可能的,因为没有更改“ok”文本的选项,但如果修改tkinter模块,则可能会实现。而这正是我不建议的。 - Johnny
3个回答

12

为什么不打开一个子窗口,这样就可以创建自己的框和自己的按钮,就像这样:

from tkinter import *
def messageWindow():
    win = Toplevel()
    win.title('warning')
    message = "This will delete stuff"
    Label(win, text=message).pack()
    Button(win, text='Delete', command=win.destroy).pack()
root = Tk()
Button(root, text='Bring up Message', command=messageWindow).pack()
root.mainloop()

9

不可以改变内置对话框按钮的文本。

最好的选择是创建自己的对话框。这并不难做,而且它给你绝对控制权来决定对话框小部件中的内容。


3

确实,在Tkinter消息框中无法更改名称,但您可以创建自己的消息框类,以便可以多次重用它。以下代码与Tkinter messagebox相同,但它具有args和kwargs作为参数。这只是为了方便。

我也在学习,所以代码没有闪光和警报。

class Message(object):
    def __init__(self,parent, *args, **kwargs):
        self.parent=parent
        top=Toplevel(self.parent)
        top.geometry("400x200")
        top.transient(self.parent)

        top.title(args[0])
        f0=Frame(top)
        top.l1=Label(f0, text=args[1])
        top.l1.pack(pady=30)
        f0.pack()
        top.grab_set()
        top.f1=Frame(top)
        for key in kwargs:
            key=Button(top.f1, text=f"{kwargs[key]}")
            key.pack(side=LEFT)
        top.f1.pack()

消息框将看起来像这样:

这是一个示例消息框,通常用于在IT技术中向用户显示信息或错误消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接