gpt4 book ai didi

python - 如何防止子窗口关闭之前父窗口关闭

转载 作者:行者123 更新时间:2023-12-01 02:52:58 25 4
gpt4 key购买 nike

我知道,来自here ,

grab_set() [#]: Routes all events for this application to this widget.

好的,但它不会阻止用户使用 X 按钮关闭父窗口。除了其他事件之外,如何路由“X 按钮关闭”事件?

MWE:

from Tkinter import *

class Window(Toplevel):

def __init__(self, master):
Toplevel.__init__(self)


class MainWindow(Tk):

def __init__(self):
Tk.__init__(self)
Button(self, command=self.open_window).grid(row=0, column=0)

def open_window(self):
win = Window(self)
win.grab_set()


app = MainWindow()
app.mainloop()

最佳答案

假设如果子窗口存在,尝试关闭父窗口会将其置于焦点中,这需要一些更改:

  1. 使用 .protocol("WM_DELETE_WINDOW") 覆盖关闭协议(protocol),以便检查子窗口。
  2. 保留对子窗口的引用
class MainWindow(Tk):

def __init__(self):
Tk.__init__(self)
Button(self, text="hello there", command=self.open_window).grid(row=0, column=0)
self.protocol("WM_DELETE_WINDOW", self.try_to_close)
self.win = None

def open_window(self):
if self.win is None or not self.win.winfo_exists():
self.win = Window(self)
self.win.lift(self)
self.win.focus_set()

def try_to_close(self):
if self.win is not None and self.win.winfo_exists():
self.win.lift()
else:
self.destroy()

关于python - 如何防止子窗口关闭之前父窗口关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44526738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com