2008-09-05 12 views
7

私はコマンドラインで渡されたテキストを含むメッセージボックスをポップアップさせるちょっとしたpythonスクリプトを書きました。以前の呼び出しからのウィンドウが開いていないときにのみポップアップしたい。与えられたタイトルのウィンドウが既にTkで開いているかどうかを知るには?

from Tkinter import * 
import tkMessageBox 

root = Tk() 
root.withdraw() 

# TODO not if a window with this title exists 
tkMessageBox.showinfo("Key you!", " ".join(sys.argv[1:])) 

これを確認する方法はありますか?

答えて

2

私はあなたがしたいと考えている:

if 'normal' != root.state(): 
    tkMessageBox.showinfo("Key you!", " ".join(sys.argv[1:])) 
+0

私はこれを試しても動作しません。とにかく新しいウィンドウが開きます。 多分私は十分にはっきりしませんでした:2つのPythonインタプリタが同時に動作しています。他のプロセスが実行されているとき、つまりそのウィンドウのウィンドウまたはそのタイトルを持つウィンドウがすでに開いているときに、2番目のプロセスを終了します。 – Tibi

0

前の答えはあなたが提供したコードに応じて動作します。回答者が「soisbêteetdiscipliné」ルールに準拠しているため、あなたの質問にroot.mainloop()を追加していないというルールでは機能しません。イベントループによって引き起こされるいくつかの理由で、あなたは次のように「撤回」正確な文字列をテストする必要があり、後に行を追加することで

import tkinter as tk 
from tkinter import messagebox 
import sys 


root = tk.Tk() 
root.withdraw() 

if 'withdrawn' != root.state(): 
    messagebox.showinfo("Key you!", sys.argv[1:]) 


root.mainloop() 

注:それ以外の場合は、あなたのターミナルセッションがなりますこのコードを実行しません電話を切る。この不快感を回避するには、root.state("normal")を使用して、[Ok]ボタンをクリックしたようにメッセージボックスが消えるようにする、またはroot.iconify()を使用してウィンドウの状態をリセットする必要があります。 OSのタスクバーに表示されるtkinterアイコンをクリックします。

関連する問題