【问题标题】:How to know whether a window with a given title is already open in Tk?如何知道具有给定标题的窗口是否已经在 Tk 中打开?
【发布时间】:2010-09-07 21:57:42
【问题描述】:

我编写了一个小 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:]))

知道如何检查吗?

【问题讨论】:

    标签: python tkinter tk


    【解决方案1】:

    我相信你想要:

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

    【讨论】:

    • 我试过了,还是不行,新窗口还是打开了。也许我不够清楚:两个 python 解释器同时运行。我希望第二个进程在另一个进程正在运行时退出,即当窗口(或具有该标题的任何窗口)已经打开时。
    【解决方案2】:

    上一个答案根据您提供的代码起作用。你说它不起作用,因为回答者遵守“sois bête et discipliné”规则,因为他没有在他的代码中添加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") 重置窗口状态,这将导致消息框消失,就像单击“确定”按钮一样,或者您可以通过root.iconify() 停止终端会话以右键单击操作系统任务栏上显示的 tkinter 图标挂断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多