如何在tkinter中检测子窗口是否打开或关闭

3
我正在使用tkinter在Python中进行一些基本的GUI编程。我有一个主窗口,其中有两个按钮。每个按钮打开一个特定的子窗口,但问题是每次单击任何一个按钮时都会生成新窗口。我想检查子窗口是否已经打开,并防止在单击按钮时多次打开同一个窗口。如何检查子窗口是打开还是关闭?
我阅读了文档和stackoverflow上的一些帖子,但找不到相关的解决方案。
我的代码简述:
# First Window
def open_first_win():
    first_win = Toplevel(root)
    first_win.title("First Window")
    
# Second Window
def open_second_win():
    second_win = Toplevel(root)
    second_win.title("Second Window")

# Main Window
root = Tk()
root.title("Main Window")
root.geometry('300x100')

btn1 = Button(root,text="Btn1",command=open_first_win)
btn1.pack()

btn2 = Button(root,text="Btn2",command=open_second_win)
btn2.pack()

root.mainloop()


请查看这个链接 - JacksonPro
这是否意味着一个按钮只能打开一个窗口,或者两个按钮一次只能打开两个窗口? - Delrius Euphoria
两个按钮应该能够打开它们各自的窗口,但在关闭先前打开的窗口之前不能再次打开。 - iamsubingyawali
1个回答

3
您可以创建一个引用来判断窗口是否关闭,然后继续执行,例如:
opened = False # Create a flag
# First Window
def open_first_win():
    global opened
    if not opened:
        first_win = Toplevel(root)
        first_win.title("First Window")
        opened = True # Now it is open
        first_win.protocol('WM_DELETE_WINDOW',lambda: onclose(first_win)) # If it is closed then set it to False
    
def onclose(win): # Func to be called when window is closing, passing the window name
    global opened
    opened = False # Set it to close
    win.destroy() # Destroy the window

# Second Window
def open_second_win():
    global opened
    if not opened:
        second_win = Toplevel(root)
        second_win.title("Second Window")
        opened = True
        second_win.protocol('WM_DELETE_WINDOW',lambda: onclose(second_win))

就像这个词所表达的那样,协议只是向窗口添加一些规则,例如WM_DELETE_WINDOW表示当窗口尝试关闭时要调用哪个函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接