Как я могу создать простое окно сообщения в Python?
Я ищу тот же эффект, что и alert()
в JavaScript.
Я написал простой веб-переводчик сегодня днем с помощью Twisted.сеть. Вы в основном отправляете блок кода Python через форму, и клиент приходит, захватывает его и выполняет. Я хочу иметь возможность сделать простое всплывающее сообщение, без необходимости переписывать целую кучу шаблонного кода wxPython или TkInter каждый раз (так как код отправляется через форму, а затем исчезает.)
Я пробовал tkMessageBox:
import tkMessageBox
tkMessageBox.showinfo(title="Greetings", message="Hello World!")
но это открывает другое окно в фоновом режиме со значком tk. Я не хочу этого. Я искал какой-то простой код wxPython, но он всегда требовал настройки класса и ввода цикла приложения и т. д. Нет ли простого, свободного от улова способа создания окна сообщения в Python?
12 ответов:
вы можете использовать импорт и одну строку такой код:
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!")
код, который вы представили-это хорошо! Вам просто нужно явно создать "другое окно в фоновом режиме" и скрыть его, с помощью этого кода:
import Tkinter window = Tkinter.Tk() window.wm_withdraw()
прямо перед вашим сообщение.
на Mac стандартная библиотека python имеет модуль под названием
EasyDialogs
. Существует также (на основе ctypes) версия windows в http://www.averdevelopment.com/python/EasyDialogs.htmlЕсли это имеет значение для вас: он использует собственные диалоги и не зависит от Tkinter, как уже упоминалось
easygui
, но у него может быть не так много функций.
в Windows, вы можете использовать ctypes с библиотекой user32:
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 (), но использует * при вводе). Эти вызовы функций блокируются до тех пор, пока пользователь не нажмет кнопку OK/Cancel. Это кросс-платформенный, чистый модуль 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/
import ctypes ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 1)
последнее число (здесь 1) можно изменить, чтобы изменить стиль окна (не только кнопки!):
## Button 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 ## To also change icon, add these values to previous number # 16 Stop-sign icon # 32 Question-mark icon # 48 Exclamation-point icon # 64 Information-sign icon consisting of an 'i' in a circle
например,
ctypes.windll.user32.MessageBoxW(0, "That's an error", "Warning!", 16)
даст этой.
использовать
from tkinter.messagebox import * Message([master], title="[title]", message="[message]")
главное окно должно быть создано раньше. Это для Python 3. Это не fot wxPython, а для 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
можно создать любое количество входов, (соотношение, флажок, inputbox), автоматически организовать их на одном графическом интерфейсе.