我有以下代码,显示一个弹出窗口(无装饰),显示项目列表框及其在LabelFrame
中的计数。
由于这是一个弹出窗口,我的目的是在光标移出窗口时隐藏该窗口。
使用下面的代码,当鼠标光标离开框架时,窗口会消失,但当鼠标移过Scrollbar
时,窗口也会消失。
出于某种原因,<Leave>
与对象本身的绑定也会考虑Listbox
而Scrollbar
未被占用。
为什么呢?如何修复代码,使鼠标悬停在框架的所有小部件上,使框架可见,只有当它移出整个框架时,它才会消失?
class ForeachViewer(Toplevel):
def __init__(self, parent):
Toplevel.__init__(self, parent)
self.overrideredirect(True)
self.main_frame = LabelFrame(self, text="Total:")
self.main_frame.pack(expand=1, fill='both', padx=5, pady=5)
self.content_items = StringVar()
self.group_expansion = Listbox(self.main_frame,
activestyle = 'none',
selectmode='single',
font=text_font,
listvariable = self.content_items,
relief='flat',
highlightthickness = 0)
self.group_expansion.grid(row=1, column=1, sticky="nswe")
self.yscrollbar = Scrollbar(self.main_frame, orient='vertical')
self.yscrollbar.grid(row=1, column=2, sticky='ns')
self.group_expansion.configure(yscrollcommand=self.yscrollbar.set)
self.yscrollbar.configure(command=self.group_expansion.yview)
self.bind("<Leave>", lambda event : self.hide())
self.hide()
def contents(self, content):
max_length = len(max(content, key=len)) + 5
self.main_frame.configure(text= " Total Items: %d" % len(content))
self.group_expansion.configure(state="normal", width=max_length)
self.content_items.set(" ".join(content))
self.group_expansion.configure(state="disable")
def show(self, at_x, at_y):
self.geometry("+%d+%d" % (at_x, at_y))
self.deiconify()
def hide(self):
self.withdraw()
答案 0 :(得分:0)
它适用于类类型绑定:
self.bind_class('Toplevel',"<Leave>", lambda event : self.hide())
第一个参数是事件所针对的类型,它可以是&#39; Button&#39;或基础类#Toplevel&#39;在你的例子中。