WM_DELETE_WINDOW tkinter协议在我打开一个新的Toplevel时执行



我有一个tkinter窗口,其中有一个打开Toplevel窗口的按钮。我在柜台的帮助下限制了窗户的数量。

但每次我单击按钮打开窗口时,WM_DELETE_window协议都会执行(与重置计数器功能绑定(并重置我的计数器。

from tkinter import *
root = Tk()
# root stuff
btn1 = Button(root,text="Add Book",command=lambda: [add_open(), addBook()]).pack()
# add_open() is the counter function
root.mainloop()

在saparate文件中定义的addBook((函数

def addBook():
if add_check(): # check counter
AddBookWindow = Toplevel()

# more block of code
AddBookWindow.protocol("WM_DELETE_WINDOW", add_close()) # reset counter
AddBookWindow.mainloop()

在不同文件中定义的计数器功能

def add_check():
with open(r"countersaddbook.txt", "r") as file:
a = file.read()
return True if a == "1" else False

def add_open():
with open(r"countersaddbook.txt", "a") as file:
file.write("1")

def add_close():
print("add close")
with open(r"countersaddbook.txt", "w") as file:
file.write("")

您执行了add_close()并将结果传递给protocol()。请改用AddBookWindow.protocol("WM_DELETE_WINDOW", add_close)。(类似acw1668的答案。(