使框架在未聚焦时消失
Make frame disappear when it is not in focus
我试图让框架在未聚焦时消失,例如,如果在框架以外的任何地方单击鼠标,框架就会消失。
就像弹出菜单一样,虽然我不想使用弹出菜单。
代码如下:
from tkinter import *
root = Tk()
root.geometry('700x700')
b = Button(root, text='Show Frame',command=lambda: showlabel())
b.pack()
l = Frame(width=200,height=200,bg='black')
l.bind("<FocusOut>", l.pack_forget())
def showlabel():
l.pack()
root.mainloop()
<FocusOut>
指的是键盘焦点。然而,这听起来不是你的意思,因为框架通常没有键盘焦点。
如果您尝试模拟弹出窗口 window 或消息框,一种方法是在 window 上添加 grab,然后添加一个当您在 window.
之外单击时检测到的绑定
A grab 是一种将所有事件集中到 window 及其子项的方法。这很方便,因为您不希望用户在弹出窗口 window 可见时与窗口小部件进行交互。例如,如果 window 已经可见,您不希望单击 Show Frame
按钮打开另一个 window。
创建框架后,您可以在框架上调用 grab_set
。然后,您可以在框架上添加绑定,即使用户在框架外单击,绑定也会触发。在绑定中,您可以检查绑定是在内部还是外部,如果点击在外部,则隐藏 window。
解决方案看起来像这样:
def showlabel():
def dismiss(event):
if not ((0 <= event.x <= l.winfo_width()) and (0 <= event.y <= l.winfo_height())):
l.grab_release()
l.pack_forget()
l.pack(pady=20)
l.bind("<1>", dismiss)
l.grab_set()
这会更好地实现为 class,但这给出了一个总体思路。
我试图让框架在未聚焦时消失,例如,如果在框架以外的任何地方单击鼠标,框架就会消失。
就像弹出菜单一样,虽然我不想使用弹出菜单。
代码如下:
from tkinter import *
root = Tk()
root.geometry('700x700')
b = Button(root, text='Show Frame',command=lambda: showlabel())
b.pack()
l = Frame(width=200,height=200,bg='black')
l.bind("<FocusOut>", l.pack_forget())
def showlabel():
l.pack()
root.mainloop()
<FocusOut>
指的是键盘焦点。然而,这听起来不是你的意思,因为框架通常没有键盘焦点。
如果您尝试模拟弹出窗口 window 或消息框,一种方法是在 window 上添加 grab,然后添加一个当您在 window.
之外单击时检测到的绑定A grab 是一种将所有事件集中到 window 及其子项的方法。这很方便,因为您不希望用户在弹出窗口 window 可见时与窗口小部件进行交互。例如,如果 window 已经可见,您不希望单击 Show Frame
按钮打开另一个 window。
创建框架后,您可以在框架上调用 grab_set
。然后,您可以在框架上添加绑定,即使用户在框架外单击,绑定也会触发。在绑定中,您可以检查绑定是在内部还是外部,如果点击在外部,则隐藏 window。
解决方案看起来像这样:
def showlabel():
def dismiss(event):
if not ((0 <= event.x <= l.winfo_width()) and (0 <= event.y <= l.winfo_height())):
l.grab_release()
l.pack_forget()
l.pack(pady=20)
l.bind("<1>", dismiss)
l.grab_set()
这会更好地实现为 class,但这给出了一个总体思路。