更改按钮文本MessageBox

时间:2018-05-15 03:33:46

标签: python ctypes

使用answer中的How can I create a simple message box in Python?,我创建了一个是/否/取消弹出框:

>>> import ctypes
>>> ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 3)

看起来像这样:

enter image description here

我想知道你是否可以更改默认设置中的按钮文字"是","否"和"取消"?我知道我可以使用tkinter来执行此操作,但这是ctypes实施的快速解决方法吗?

1 个答案:

答案 0 :(得分:1)

我认为@Paul Rooney有一个很好的观点,即tkinter将是跨平台的。并且有一点可能比调用消息框更多的开销。

查看MessageBox documentation from Microsoft(MessageBoxW是MessageBox的unicode版本),看起来你有一些选项可以选择按钮是什么,这是由函数调用中的第4个参数决定的:< / p>

MB_ABORTRETRYIGNORE = 2
MB_CANCELTRYCONTINUE = 6
MB_HELP = 0x4000 = 16384
MB_OK   = 0
MB_OKCANCEL = 1
MB_RETRYCANCEL = 5
MB_YESNO = 4
MB_YESNOCANCEL = 3

如果这些选择对您有好处,并且您严格遵守Windows,那么这可能是您的赢家。它很好,因为你只有ctypes导入和实际的函数调用。虽然为了更安全一点,但您应该考虑使用argtypes function from ctypes to make a function prototype

要以tkinter方式执行此操作,您仍然可以使用大多数相同的选项来显示简单的消息框(例如,是/否,确定/取消等)。如果确实需要控制按钮文本,那么您必须布局基本表单。这是制作自己表单的基本示例。我觉得你觉得这很乏味。

from tkinter import Tk, LEFT, RIGHT, BOTH, RAISED, Message
from tkinter.ttk import Frame, Button, Style, Label


class Example(Frame):

    def __init__(self):
        super().__init__()   

        self.initUI()


    def initUI(self):

        self.master.title("Buttons")
        self.style = Style()
        self.style.theme_use("default")

        frame = Frame(self, relief=RAISED, borderwidth=1)

        message = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua... '

        lbl1 = Message(frame, text=message)
        lbl1.pack(side=LEFT, padx=5, pady=5) 

        frame.pack(fill=BOTH, expand=True)

        self.pack(fill=BOTH, expand=True)

        button1 = Button(self, text="button1")
        button1.pack(side=RIGHT, padx=5, pady=5)
        button2 = Button(self, text="second button")
        button2.pack(side=RIGHT)


def main():

    root = Tk()
    root.geometry("300x200+300+300")
    app = Example()
    root.mainloop()  

if __name__ == '__main__':
    main()