检查 Toplevel window 是否从 python tkinter 中的外部函数打开

Check if a Toplevel window is open from outer function in python tkinter

我想做的是避免打开已经打开的 window。 所以,我有一个 window 和一个按钮,以及一个打开另一个 window 的按钮,我想再次单击该按钮,如果第二个 window 它已经打开,则将焦点更改为第二个 window 或者如果它没有打开,请打开它。

我尝试使用 secondwindow.winfo_exists() 但是由于启动第二个 window 的按钮的功能不在第二个 window 功能中,所以 returns 我的secondwindow 未定义。

除此之外,我添加了第二个按钮来检查是否创建了第二个 window,而不是检查再次调用相同的函数。

有什么办法吗?这是我使用的代码的一部分:

def startwind1():
    wind1 = tk.Tk()
    wind1.title('Window 1')
    w1button1 = ttk.Button(wind1,text='Launch Window 2',command=startwind2).pack()
    w1button2 = ttk.Button(wind1,text='Check if Window 2 exists',command=checkwind2).pack()
    wind1.mainloop()

def startwind2():
    wind2 = tk.Toplevel()
    wind2.title('Window 2')

def checkwind2():
    if wind2.winfo_exists() == 1:
        print('Window 2 exists')
    else:
        print('Window 2 not exists )

希望你能帮助我!

startwind2里面你必须使用global wind2将window赋值给全局变量,然后它才能在其他函数中使用。

它还需要创建 wind2 = None,这样变量甚至在您创建 window 之前就可用了。

import tkinter as tk
from tkinter import ttk

wind2 = None

def startwind1():
    #global wind2
    #wind2 = None

    wind1 = tk.Tk()
    wind1.title('Window 1')

    w1button1 = ttk.Button(wind1,text='Launch Window 2', command=startwind2)
    w1button1.pack()

    w1button2 = ttk.Button(wind1,text='Check if Window 2 exists',command=checkwind2)
    w1button2.pack()

    wind1.mainloop()

def startwind2():
    global wind2

    wind2 = tk.Toplevel()
    wind2.title('Window 2')

def checkwind2():
    if (wind2 is not None) and wind2.winfo_exists():
        print('Window 2 exists')
    else:
        print('Window 2 not exists')

startwind1()

您也可以使用 if 语句执行此操作。这是一种不同的方法,但效果很好,而且非常简单。

win1 = None  

def startwind1():
    if wind1 is not None and win1.winfo_exists():
        pass

    else:
        global wind1
        wind1 = tk.Tk()
        wind1.title('Window 1')
        wind1.mainloop()