JavaScriptのalert()
と同じ効果を探しています。
今日の午後、Twisted.webを使用して簡単なWebベースのインタープリターを作成しました。基本的に、フォームを介してPythonコードのブロックを送信すると、クライアントが来てそれを取得し、実行します。ボイラープレートwxPythonまたはTkInterのコードを毎回書き直すことなく、簡単なポップアップメッセージを作成できるようにしたい(コードがフォームを介して送信されてから消えるので)。
私はtkMessageBoxを試しました:
import tkMessageBox
tkMessageBox.showinfo(title="Greetings", message="Hello World!")
しかし、これにより、バックグラウンドでtkアイコンのある別のウィンドウが開きます。これは欲しくありません。いくつかの単純なwxPythonコードを探していましたが、クラスを設定し、アプリループなどを入力する必要が常にありました。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!")
あなたが提示したコードは問題ありません!次のコードを使用して、「バックグラウンドで他のウィンドウ」を明示的に作成し、非表示にするだけです。
import Tkinter
window = Tkinter.Tk()
window.wm_withdraw()
メッセージボックスの直前。
Macでは、python標準ライブラリにはEasyDialogs
というモジュールがあります。 http://www.averdevelopment.com/python/EasyDialogs.html には(ctypesベースの)Windowsバージョンもあります
あなたにとって重要な場合:ネイティブダイアログを使用し、既に説明したeasygui
のようにTkinterに依存しませんが、それほど多くの機能を持たない場合があります。
Windowsでは、 ser32ライブラリでの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()ですが、入力時に*を使用します)。これらの関数呼び出しは、ユーザーが[OK]または[キャンセル]ボタンをクリックするまでブロックします。依存関係のない、クロスプラットフォームの純粋なPythonモジュールです。
でインストール:pip install PyMsgBox
サンプル使用法:
>>> import pymsgbox
>>> pymsgbox.alert('This is an alert!', 'Title')
>>> response = pymsgbox.Prompt('What is your name?')
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)
this を与えます:
つかいます
from tkinter.messagebox import *
Message([master], title="[title]", message="[message]")
マスターウィンドウは事前に作成する必要があります。これはPython 3用です。これは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 __== '__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
"""
最近のメッセージボックスバージョンは、Prompt_boxモジュールです。アラートとメッセージの2つのパッケージがあります。メッセージを使用すると、ボックスをより細かく制御できますが、入力に時間がかかります。
アラートコードの例:
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
pythonモジュールを確認してください:pip install quickgui(wxPythonが必要ですが、wxPythonの知識は必要ありません) https://pypi.python.org/pypi/quickgui
任意の数の入力(比率、チェックボックス、入力ボックス)を作成し、それらを1つのGUIに自動配置できます。