当子窗口';在Tkinter 8.5和Python 3.3中单击红色X

当子窗口';在Tkinter 8.5和Python 3.3中单击红色X,python,tkinter,Python,Tkinter,这里是新手问题。我希望在thirdWindow中单击红色X时,除了销毁thirdWindow之外,还销毁secondWindow,就像在thirdWindow中单击thirdButton时发生的情况一样第一个窗口应保持活动状态 下面是一些示例代码: import tkinter from tkinter import ttk def secondWindow(): secondWindow = tkinter.Toplevel(firstWindow) secondFrame

这里是新手问题。我希望在
thirdWindow
中单击红色X时,除了销毁
thirdWindow
之外,还销毁
secondWindow
,就像在
thirdWindow
中单击
thirdButton
时发生的情况一样<代码>第一个窗口应保持活动状态

下面是一些示例代码:

import tkinter
from tkinter import ttk 

def secondWindow():
    secondWindow = tkinter.Toplevel(firstWindow)
    secondFrame = ttk.Frame(secondWindow)
    secondFrame.pack()
    secondButton = ttk.Button(secondFrame, text="proceed to 3rd window",\
                              command=lambda: thirdWindow(secondWindow))
    secondButton.pack()

def thirdWindow(parent):
    thirdWindow = tkinter.Toplevel(parent)
    thirdFrame = ttk.Frame(thirdWindow)
    thirdFrame.pack()
    thirdButton = ttk.Button(thirdFrame, text="close 2nd and 3rd windows",\
                             command=lambda: destroy(thirdWindow, parent))
    thirdButton.pack()

def destroy(self, parent):
    self.destroy()
    parent.destroy()

firstWindow = tkinter.Tk()
firstFrame = ttk.Frame(firstWindow)
firstFrame.pack()
firstButton = ttk.Button(firstFrame, text="proceed to 2nd window",\
                         command=secondWindow)
firstButton.pack()
firstWindow.mainloop()

提前感谢您提供的任何帮助

使用
parent
运行
parent
函数或从
parent
获取变量-例如获取其
parent
或运行关闭其父函数

import tkinter
from tkinter import ttk 

def secondWindow(parent):
    secondWindow = tkinter.Toplevel(parent)
    secondWindow.parent = parent # remember parent

    secondFrame = ttk.Frame(secondWindow)
    secondFrame.pack()
    secondButton = ttk.Button(secondFrame, text="proceed to 3rd window",\
                              command=lambda: thirdWindow(secondWindow))
    secondButton.pack()

def thirdWindow(parent):
    thirdWindow = tkinter.Toplevel(parent)
    thirdWindow.parent = parent # remember parent

    thirdFrame = ttk.Frame(thirdWindow)
    thirdFrame.pack()
    thirdButton = ttk.Button(thirdFrame, text="close 2nd and 3rd windows",\
                             command=lambda: destroy(thirdWindow))
    thirdButton.pack()

def destroy(self):
    self.parent.parent.destroy()  # destroy grand-parent and all children are dead too.

firstWindow = tkinter.Tk()
firstFrame = ttk.Frame(firstWindow)
firstFrame.pack()
firstButton = ttk.Button(firstFrame, text="proceed to 2nd window",\
                         command=lambda:secondWindow(firstWindow))
firstButton.pack()
firstWindow.mainloop()

thirdWindow.protocol(“WM_DELETE_WINDOW”,lambda:destroy(thirdWindow,parent))
添加到
thirdWindow()
函数中似乎已经达到了目的。

当我运行此代码时,它并没有达到我预期的效果。我希望退出第三个窗口(通过单击按钮或红色X)以仅终止其父窗口(
secondWindow
),而不终止
firstWindow
。是否终止第二个窗口并保持第三个窗口打开?我想你不能。父母总是杀孩子。或者更确切地说是
垃圾收集器
清除内存并将其删除。对不起,澄清一下:退出第三个窗口(通过单击按钮或红色X)会杀死它的父窗口和它自己,但不会杀死祖父母窗口(firstwindow)。我运行你的代码,它会关闭第三个窗口及其父窗口。所以没有什么可做的,这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时在自己的帖子上发表评论,一旦有足够的评论,您就可以发表评论了。@Lal我不确定您的意思。上面的代码正是我要做的——使用孩子的红色X按钮杀死自己和父母(但不是祖父母)。也许我的问题不太清楚?你的答案可能是正确的。我对此发表评论是因为它被标记为低质量的帖子。。