Как создать простой ящик сообщений в Python?
Я ищу тот же эффект, что и alert()
в JavaScript.
Сегодня днем я написал простой веб-переводчик, используя Twisted.web. Вы в основном представляете блок кода Python через форму, и клиент приходит и захватывает его и выполняет его. Я хочу, чтобы иметь возможность создать простое всплывающее сообщение без необходимости переписывать целую кучу кода шаблона wxPython или TkInter каждый раз (поскольку код отправляется через форму и затем исчезает).
Я пробовал tkMessageBox:
import tkMessageBox
tkMessageBox.showinfo(title="Greetings", message="Hello World!")
но это открывает другое окно в фоновом режиме с помощью значка tk. Я не хочу этого. Я искал простой код wxPython, но он всегда требовал установки класса и ввода цикла приложения и т.д. Нет ли простого, свободного метода создания окна сообщений в Python?
Ответы
Ответ 1
Вы можете использовать код импорта и одиночной строки следующим образом:
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
Ответ 2
Вы посмотрели easygui?
import easygui
easygui.msgbox("This is a message!", title="simple gui")
Ответ 3
Также вы можете поместить другое окно, прежде чем снимать его, чтобы вы позиционировали свое сообщение
#!/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!")
Ответ 4
Код, который вы представили, в порядке! Вам просто нужно явно создать "другое окно в фоновом режиме" и скрыть его с помощью этого кода:
import Tkinter
window = Tkinter.Tk()
window.wm_withdraw()
Прямо перед вашим сообщением.
Ответ 5
В 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")
Ответ 6
В Mac стандартная библиотека python имеет модуль под названием EasyDialogs
. Существует также версия windows (на основе ctypes) на http://www.averdevelopment.com/python/EasyDialogs.html
Если это имеет значение для вас: оно использует собственные диалоги и не зависит от Tkinter, как уже упомянутый easygui
, но может иметь не так много функций.
Ответ 7
Модуль PyMsgBox выполняет именно это. Он имеет функции окна сообщений, которые соответствуют соглашениям об именах JavaScript: alert(), confirm(), prompt() и password() (который является приглашением(), но использует * при вводе). Эти функциональные вызовы блокируются до тех пор, пока пользователь не нажмет кнопку "ОК/Отмена". Это кросс-платформенный, чистый модуль 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/
Ответ 8
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 an error", "Warning!", 16)
даст это:
![enter image description here]()
Ответ 9
Использование
from tkinter.messagebox import *
Message([master], title="[title]", message="[message]")
Главное окно должно быть создано ранее. Это для Python 3. Это не fot wxPython, а для tkinter.
Ответ 10
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
Ответ 11
Также вы можете расположить другое окно перед его снятием, чтобы расположить свое сообщение
from tkinter import *
import tkinter.messagebox
window = Tk()
window.wm_withdraw()
# message at x:200,y:200
window.geometry("1x1+200+200") # remember its.geometry("WidthxHeight(+or-)X(+or-)Y")
tkinter.messagebox.showerror(title="error", message="Error Message", parent=window)
# center screen message
window.geometry(f"1x1+{round(window.winfo_screenwidth() / 2)}+{round(window.winfo_screenheight() / 2)}")
tkinter.messagebox.showinfo(title="Greetings", message="Hello World!")
Обратите внимание: это ответ льюиса Коулза только на Python 3ified, так как tkinter изменился с python 2. Если вы хотите, чтобы ваш код был совместимым с обратными словами, сделайте что-то вроде этого:
try:
import tkinter
import tkinter.messagebox
except ModuleNotFoundError:
import Tkinter as tkinter
import tkMessageBox as tkinter.messagebox
Ответ 12
Не самое лучшее, вот мое основное поле Message, используя только 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
"""
Ответ 13
проверить мой модуль python: pip install quickgui (Требуется wxPython, но не требует знания wxPython)
https://pypi.python.org/pypi/quickgui
Может создавать любые количества входов, (соотношение, флажок, входное поле), автоматически размещать их на одном gui.
Ответ 14
Последняя версия окна сообщения - это модуль prompt_box. Он имеет два пакета: оповещение и сообщение. Сообщение дает вам больший контроль над окном, но требует больше времени для ввода.
Пример кода предупреждения:
import prompt_box
prompt_box.alert('Hello') #This will output a dialog box with title Neutrino and the
#text you inputted. The buttons will be Yes, No and Cancel
Пример кода сообщения:
import prompt_box
prompt_box.message('Hello', 'Neutrino', 'You pressed yes', 'You pressed no', 'You
pressed cancel') #The first two are text and title, and the other three are what is
#printed when you press a certain button