2008-09-05 66 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图标。

相关问题