【问题标题】:tkinter protocol WM_DELETE_WINDOW not working on extra windowstkinter 协议 WM_DELETE_WINDOW 在额外的窗口上不起作用
【发布时间】:2016-12-20 14:49:26
【问题描述】:

我想在我的 tkinter 应用程序(tkinter 8.6、python 3.5、ubuntu xenial)中运行一些额外的窗口。虽然我可以从主应用程序中选择删除窗口协议 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()

【问题讨论】:

    标签: python linux python-3.x tkinter


    【解决方案1】:

    你是对的:当你看到它时,它会非常明显。很抱歉这个坏消息。

    当你点击按钮时,你创建了一个tkinter.Toplevel 的实例,你创建了一个wind1 的实例。由于您获得的是通用 Toplevel,因此它没有与 WM_DELETE_WINDOW 的绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多