我如何在Python中创build一个简单的消息框?

我正在寻找与JavaScript中的alert()相同的效果。

我今天下午使用Twisted.web写了一个简单的基于networking的解释器。 你基本上是通过一个表单提交一段Python代码,然后客户端来抓取并执行它。 我希望能够做一个简单的popup消息,而不必每次重写一大堆模板wxPython或TkInter代码(因为代码通过表单提交,然后消失)。

我试过tkMessageBox:

 import tkMessageBox tkMessageBox.showinfo(title="Greetings", message="Hello World!") 

但是这会在tk图标的背景下打开另一个窗口。 我不想要这个 我正在寻找一些简单的wxPython代码,但它总是需要设置一个类,并进入一个应用程序循环等等。有没有简单,无catch方式的Python中的消息框?

你可以使用像这样的导入和单行代码:

 import ctypes # An included library with Python install. ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 1) 

或者像这样定义一个函数(Mbox):

 import ctypes # An included library with Python install. def Mbox(title, text, style): return ctypes.windll.user32.MessageBoxW(0, text, title, style) Mbox('Your title', 'Your text', 1) 

注意样式如下:

 ## Styles: ## 0 : OK ## 1 : OK | Cancel ## 2 : Abort | Retry | Ignore ## 3 : Yes | No | Cancel ## 4 : Yes | No ## 5 : Retry | No ## 6 : Cancel | Try Again | Continue 

玩的开心!

注意:编辑使用MessageBoxW而不是MessageBoxA

你看了easygui吗?

 import easygui easygui.msgbox("This is a message!", title="simple gui") 

您也可以在提取其他窗口之前放置其他窗口,以便定位您的消息

 #!/usr/bin/env python from Tkinter import * import tkMessageBox window = Tk() window.wm_withdraw() #message at x:200,y:200 window.geometry("1x1+200+200")#remember its .geometry("WidthxHeight(+or-)X(+or-)Y") tkMessageBox.showerror(title="error",message="Error Message",parent=window) #centre screen message window.geometry("1x1+"+str(window.winfo_screenwidth()/2)+"+"+str(window.winfo_screenheight()/2)) tkMessageBox.showinfo(title="Greetings", message="Hello World!") 

你提交的代码很好! 你只需要在后台显式地创build“其他窗口”,并用下面的代码隐藏它:

 import Tkinter window = Tkinter.Tk() window.wm_withdraw() 

在你的消息框之前。

在Mac上,Python标准库有一个名为EasyDialogs的模块。 在http://www.averdevelopment.com/python/EasyDialogs.html还有一个(基于ctypes的)windows版本;

如果对你很重要:它使用本机对话框,不像Tkinter那样依赖于已经提到的easygui ,但它可能没有那么easygui

在Windows中,你可以在user32库中使用ctypes :

 from ctypes import c_int, WINFUNCTYPE, windll from ctypes.wintypes import HWND, LPCSTR, UINT prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT) paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", None), (1, "flags", 0) MessageBox = prototype(("MessageBoxA", windll.user32), paramflags) MessageBox() MessageBox(text="Spam, spam, spam") MessageBox(flags=2, text="foo bar") 

PyMsgBox模块正是这样做的。 它具有符合JavaScript命名约定的消息框函数:alert(),confirm(),prompt()和password()(它是prompt(),但在键入时使用*)。 这些函数调用阻塞,直到用户单击确定/取消button。 这是一个跨平台的纯Python模块,没有依赖关系。

安装: pip install PyMsgBox

示例用法:

 >>> import pymsgbox >>> pymsgbox.alert('This is an alert!', 'Title') >>> response = pymsgbox.prompt('What is your name?') 

完整的文档在http://pymsgbox.readthedocs.org/en/latest/

使用

 from tkinter.messagebox import * Message([master], title="[title]", message="[message]") 

主窗口必须在之前创build。 这是Python 3.这不是fx wyPython,而是tkinter。

 import sys from tkinter import * def mhello(): pass return mGui = Tk() ment = StringVar() mGui.geometry('450x450+500+300') mGui.title('My youtube Tkinter') mlabel = Label(mGui,text ='my label').pack() mbutton = Button(mGui,text ='ok',command = mhello,fg = 'red',bg='blue').pack() mEntry = entry().pack 

不是最好的,这里是我的基本消息框只使用tkinter。

 #Python 3.4 from tkinter import messagebox as msg; import tkinter as tk; def MsgBox(title, text, style): box = [ msg.showinfo, msg.showwarning, msg.showerror, msg.askquestion, msg.askyesno, msg.askokcancel, msg.askretrycancel, ]; tk.Tk().withdraw(); #Hide Main Window. if style in range(7): return box[style](title, text); if __name__ == '__main__': Return = MsgBox(#Use Like This. 'Basic Error Exemple', ''.join( [ 'The Basic Error Exemple a problem with test', '\n', 'and is unable to continue. The application must close.', '\n\n', 'Error code Test', '\n', 'Would you like visit http://wwww.basic-error-exemple.com/ for', '\n', 'help?', ] ), 2, ); print( Return ); """ Style | Type | Button | Return ------------------------------------------------------ 0 Info Ok 'ok' 1 Warning Ok 'ok' 2 Error Ok 'ok' 3 Question Yes/No 'yes'/'no' 4 YesNo Yes/No True/False 5 OkCancel Ok/Cancel True/False 6 RetryCancal Retry/Cancel True/False """ 

看看我的Python模块:pip install quickgui(需要wxPython,但不需要知道wxPython) https://pypi.python.org/pypi/quickgui

可以创build任意数量的input(比率,checkbox,input框),自动将它们排列在一个gui上。