1

次のコード例を参照してください。

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()

親から子に移動したり戻ったりする場合に、EnterイベントとLeaveイベントがトリガーされないようにします。この特定のケースでは、これらのイベントを。でフィルタリングできることを知っていますevent.detail。ただし、境界線がない場合、これは機能しません。境界線を削除しても、イベントはまったくトリガーされません。

私の実際のコードには、(gtk.Fixedに基づく)より複雑なウィジェットがあり、最初に境界線があり、最後には境界線がありません。したがって、イベントを子に移動するだけでは、うまくいきません。

4

1 に答える 1

1
#        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)

それはあなたが必要なものですか?

于 2012-11-23T07:41:41.913 に答える