У меня несколько сложный пользовательский интерфейс, созданный с помощью Tkinter / ttk, который содержит несколько кадров, включенных в другие кадры.
Я хочу, чтобы событие <Enter>
сработало, когда я перешел от внутреннего кадра к родительскому. .
Я уже связываюсь с событием <Leave>
для других функций, но как мне получить «текущий» виджет, чтобы я мог вызвать «поддельное» событие <Enter>
на родительском виджете? Но это только если оставить ребенка родителю, а не оставить ребенка и родителя одновременно (например, на границе).
Вот пример кода, иллюстрирующий то, что я имею в виду:
#!/usr/bin/python3
import tkinter
from tkinter import ttk
def onEnter(event):
print('Widget: %s', event.widget)
class FrameTop(ttk.LabelFrame):
def __init__(self, master, *args, **kwargs):
super().__init__(master, *args, text='TopFrame', **kwargs)
for i in range(4):
lbl_t = ttk.Label(self, text='Top Label %d' % i)
lbl_t.pack()
self.bottom = FrameBottom(self, 1)
self.bottom.pack()
self.lbl = ttk.Label(self.bottom, text='Label')
self.lbl.pack()
class FrameBottom(ttk.LabelFrame):
def __init__(self, master, num, *args, **kwargs):
super().__init__(master, *args, text='BottomFrame %d' % num, **kwargs)
for i in range(5):
lbl_t = ttk.Label(self, text='#%d: Label %d' % (num, i))
lbl_t.pack()
if num < 5:
inner = FrameBottom(self, num + 1)
inner.pack()
self.bind('<Enter>', onEnter, add=True) # Bind Bottom
root = tkinter.Tk()
tp = FrameTop(root)
tp.pack()
tp.bind('<Enter>', onEnter, add=True) # Bind Bottom
root.mainloop()