1
私は、LabelFrame
のアイテムのリストボックスとそのカウントを表示するポップアップウィンドウ(装飾なし)を表示する次のコードを持っています。フレーム<Leave>イベントをすべての子ウィジェットを考慮に入れる方法?
これはポップアップウィンドウなので、カーソルが外に出るとそのウィンドウが非表示になります。
マウスカーソルがフレームから離れるとウィンドウが消えますが、マウスがScrollbar
を移動すると消えます。
Scrollbar
が取られていない間、いくつかの理由で、オブジェクト自体に<Leave>
を結合することは考慮にもListbox
をとります。
なぜですか?どのようにしてフレームのすべてのウィジェットにマウスを置くと、フレームが表示されたままになるようにコードを修正できますか?フレーム全体から移動するときだけ消えます。
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()