2008-09-05 68 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

我試過這個,它不起作用,反正新的窗口打開。 也許我還不夠清楚:兩個python解釋器同時運行。我希望第二個進程在另一個進程運行時退出,即當窗口或任何帶有該標題的窗口已經打開時。 – Tibi 2008-10-13 12:01:58

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圖標。

相關問題