如何检查 Toplevel window 是否打开?

How to check if Toplevel window is opened?

我想知道 Toplevel window 是由用户手动打开还是关闭,只有一个打开按钮用于打开 window。我试着用 winfo 来做,但由于某种原因它不能正常工作。

from tkinter import *
from tkinter import messagebox

global top
top= None
global counter
counter = 1
global root
root = None

def window1():
    root = Tk()
    root.geometry("300x200")
    root.title('Window1')
    my_button = Button(root, text="Open Window", command=openWindow2)
    my_button.pack(pady=50, padx=50)

    root.mainloop()

def openWindow2():
    global counter
    if (counter < 2):
        top = Toplevel()
        top.geometry("300x200")
        top.title('Window 2')
        my_label = Label(top, text="New Window!", font=("Helvetica, 24"))
        my_label.pack(pady=50, padx=50)
        counter +=1
    else:
        checkwind2()

def checkwind2():
    if (top is not None) and Toplevel.winfo_exists(top) == 1:
        #this situation never happens
        print("Window is opened")
    else:
        print("Window is closed")

window1()

您似乎将 global 放在了错误的位置,因此 top 变量总是显示为 None。 如果要在函数外编辑变量,需要在函数内global 添加

试试这个:

from tkinter import *
from tkinter import messagebox

top= None
counter = 1
root = None

def window1():
    root = Tk()
    root.geometry("300x200")
    root.title('Window1')
    my_button = Button(root, text="Open Window", command=openWindow2)
    my_button.pack(pady=50, padx=50)

    root.mainloop()

def openWindow2():
    global top
    global counter
    print(counter)
    if (counter < 2):
        top = Toplevel()
        top.geometry("300x200")
        top.title('Window 2')
        my_label = Label(top, text="New Window!", font=("Helvetica, 24"))
        my_label.pack(pady=50, padx=50)
        counter +=1
    else:
        checkwind2()

def checkwind2():
    if (top is not None) and Toplevel.winfo_exists(top) == 1:
        print("Window is opened")
    else:
        print("Window is closed")

window1()