当子窗口';在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按钮杀死自己和父母(但不是祖父母)。也许我的问题不太清楚?你的答案可能是正确的。我对此发表评论是因为它被标记为低质量的帖子。。