请参阅此代码示例:
import gtk
class MenuBox(gtk.EventBox):
def __init__(self):
super(MenuBox, self).__init__()
self.set_visible_window(False)
self.connect('enter-notify-event', self._on_mouse_enter)
self.connect('leave-notify-event', self._on_mouse_leave)
btn = gtk.Button('x')
btn.set_border_width(12)
self.add(btn)
def _on_mouse_enter(self, wid, event):
print '_on_mouse_enter'
def _on_mouse_leave(self, *args):
print '_on_mouse_leave'
def main():
win = gtk.Window()
win.connect('destroy', gtk.main_quit)
win.add(MenuBox())
win.show_all()
gtk.main()
if __name__ == '__main__':
main()
如果我从父母到孩子再回来,我希望不会触发进入和离开事件。我知道在这种特殊情况下,我可以使用event.detail
. 但如果没有边界,这不起作用。如果我删除边框,则根本不会触发事件。
在我的真实代码中,我有一个更复杂的小部件(基于 gtk.Fixed),它在开头有边框但在结尾没有边框。因此,仅仅将事件转移给孩子也不会奏效。