如何知道具有给定标题的窗口是否已在Tk中打开?

时间:2008-09-05 11:07:06

标签: python tkinter tk

我写了一个小的python脚本,只弹出一个包含命令行传递的文本的消息框。我想只在前一次调用的窗口未打开时弹出它。

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 个答案:

答案 0 :(得分:2)

我相信你想要:

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

答案 1 :(得分:0)

之前的答案与您提供的代码相对应。你说这不起作用,因为回答者遵守“soisbêteetcipliné”规则,因为他没有将root.mainloop()添加到他的代码中,因为你的问题也没有。

通过添加后一行,由于某种原因由事件循环引起,您应该按如下方式测试确切的字符串“withdrawn”:

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()你可以停止通过右键单击操作系统任务栏上显示的tkinter图标来挂断终端会话。