2013-06-24 39 views
13

ubuntuで動作するPythonスクリプトに情報ウィンドウを表示したい。ウィンドウなしのTkinterメッセージボックス?

import tkMessageBox 
tkMessageBox.showinfo("Say Hello", "Hello World") 

これは動作しますが、一番上にメッセージボックスで、表示された空のウィンドウがあります:私は、次のコードを使用しています。どのように私はウィンドウを取り除くことができますし、画面上にメッセージボックスの中心を置くだけです(ウィンドウマネージャはgnome 2です)?

これは、コマンドラインスクリプト(私は単にコンソールにエコーしたくない理由のパスワード)からいくつかの情報を表示するだけです。

答えて

18

Tkinterにはルートウィンドウが必要です。作成しない場合は、作成されます。あなたはこのルートウィンドウをしたくない場合は、それを作成し、それを隠す:

import Tkinter as tk 
root = tk.Tk() 
root.withdraw() 
tkMessageBox.showinfo("Say Hello", "Hello World") 

あなたの他に選択肢がない使用tkMessageBoxにあるが、その代わりに、ルート・ウィンドウにメッセージを入れました。この方法の利点は、ウィンドウを見た目と同じように見せることができることです。

import Tkinter as tk 
root = tk.Tk() 
root.title("Say Hello") 
label = tk.Label(root, text="Hello World") 
label.pack(side="top", fill="both", expand=True, padx=20, pady=20) 
button = tk.Button(root, text="OK", command=lambda: root.destroy()) 
button.pack(side="bottom", fill="none", expand=True) 
root.mainloop() 

ルートウィンドウが作成される「フラッシュ」を避けるために

+0

完璧、おかげ – user1491250

+0

は私が、私はそれをコピーすることができ、テキストを選択することができます方法はありますか? – user1491250

+0

@ user1491250:はい。ラベルの代わりにテキストウィジェットを使用します。境界線と色を調整して、ラベルのように見せることができます。 –

3

を(個人的に私はより多くのオブジェクト指向のアプローチを選ぶだろうが、私はこの例では、小さなコードを維持しようとしています)、受け入れられた答えにこのわずかなバリエーションを使用してください:

import Tkinter as tk 
root = tk.Tk() 
root.overrideredirect(1) 
root.withdraw() 
tkMessageBox.showinfo("Say Hello", "Hello World") 
2

個別にメッセージボックスをインポートしてください。たとえば:

from tkinter import * 
import tkinter.messagebox 

または

from tkinter import messagebox 
関連する問題