【发布时间】:2019-11-23 19:29:02
【问题描述】:
我试图将关闭窗口函数绑定到 Tkinter 子窗口。我已经能够为父窗口实现绑定过程,但我正在努力为子窗口制定绑定实现。
使用this question 中列出的示例,我尝试将关闭功能绑定到 Escape 键,但没有成功也没有错误消息。
import tkinter as tk
def close(self):
self.top.destroy()
class ChildWindow:
def __init__(self, master):
self.top = tk.Toplevel(master)
self.frame = tk.Frame(self.top)
self.frame.pack()
self.frame.bind("<Escape>",lambda: close(self))
self.close_button = tk.Button(self.frame, text="Close", command=self.top.destroy)
self.close_button.pack()
class MainWindow:
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.about_button = tk.Button(self.frame, text="Open child window", command=self._open_child_window)
self.about_button.pack()
self.frame.pack()
def _open_child_window(self):
self.about_window = ChildWindow(self.master)
root = tk.Tk()
lf = MainWindow(root)
root.mainloop()
【问题讨论】:
-
"self.frame.bind(...":我想,
Frame永远不会得到键盘焦点,因此得到从来都不是关键事件。 -
@stovfl 在您看来,子对象是否有任何属性可以获得键盘焦点,然后我可以将关闭函数绑定到?
-
@EQNX 我会尝试
root.bind(...,因为root应该得到所有事件。在您的def close(...中,您需要像if ChildWindow is .shown:这样的条件阅读Widget.grab_set-method -
@stovfl
root.bind(...,成功了 -
@EQNX 好的,阅读Widget.winfo_visual-method
标签: python tkinter keyboard-events toplevel