使用answer中的How can I create a simple message box in Python?,我创建了一个是/否/取消弹出框:
>>> import ctypes
>>> ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 3)
看起来像这样:
我想知道你是否可以更改默认设置中的按钮文字"是","否"和"取消"?我知道我可以使用tkinter
来执行此操作,但这是ctypes
实施的快速解决方法吗?
答案 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()