tkinter协议WM_DELETE_WINDOW不适用于额外的窗口

2024-10-03 21:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在我的tkinter应用程序(tkinter 8.6,Python3.5,UbuntuXenial)中运行一些额外的窗口。虽然我可以从主应用程序中获取删除窗口协议OK,但它不会在其他窗口上被调用。我想让用户用“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()

Tags: 答案selfnoneapp应用程序inittkinterdef
1条回答
网友
1楼 · 发布于 2024-10-03 21:30:37

你是对的:当你看到它的时候,它会变得非常明显。对不起,这个坏消息。在

当您单击按钮时,您将创建tkinter.Toplevel的实例,而不是创建wind1的实例。因为您得到的是一个泛型Toplevel,所以它没有到WM_DELETE_WINDOW的绑定。在

相关问题 更多 >