poo*_*tle 0 python linux tkinter python-3.x
我想在我的 tkinter 应用程序中运行一些额外的窗口(tkinter 8.6、python 3.5、ubuntu xenial)。虽然我可以从主应用程序中选择删除窗口协议,但它永远不会在其他窗口上被调用。我想让用户用“X”关闭窗口,但我确实需要知道他们何时这样做。
我希望一旦我看到答案,答案就会非常明显!
这个简单的测试应用程序演示了......
#!/usr/bin/python3
import tkinter
class app(tkinter.Tk):
def __init__(self):
super().__init__()
self.child1 = None
self.geometry('600x400')
w = tkinter.Button(self, command=self.bclick, text='button1')
w.pack()
self.protocol("WM_DELETE_WINDOW", self.appClose)
def bclick(self):
if self.child1 == None:
self.child1 = tkinter.Toplevel()
else:
self.child1.destroy()
self.child1 = None
def appClose(self):
print('main app close')
self.destroy()
class wind1(tkinter.Toplevel):
def __init__(self):
super().__init__()
self.title('window 1')
self.protocol("WM_DELETE_WINDOW", self.window1Close)
self.geometry('600x400')
def window1Close(self):
print("window1Close")
self.destroy()
if __name__=="__main__":
print(tkinter.TkVersion)
app().mainloop()
Run Code Online (Sandbox Code Playgroud)
你是对的:当你看到它时,它会变得非常明显。关于这些坏消息我很遗憾。
当您单击该按钮时,您将创建 的实例tkinter.Toplevel,而不是创建的实例wind1。由于您获得的是泛型Toplevel,因此它没有绑定到WM_DELETE_WINDOW.