Label does not trigger mouse event

久未见 提交于 2019-12-01 21:34:12

There are certain widgets that don't own a X-window of their own for performance reasons ,since they are mostly decorative an generally don't need to handle X event signals. You can find a complete list here.

In those cases, a GtkEventBox is recommended to wrap the windowless widget with(the EventBox was build with that objective specifically).

f4lco

OK I've got the solution, it's the same as over here: Enter-Notify-Event Signal not working on gtk.ToolButton. For some non-obvious reason some widgets can't respond to signals on their own and need an extra box around them. I've rewritten the code example in a way I would have done it - namely using imports for more recent GTK 3.0 and a more object oriented style by deriving from Gtk.Window. Also one might prefer instance methods instead of nested ones.

from gi.repository import Gtk

class Foo (Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("destroy", Gtk.main_quit)
        self.set_border_width(50)
        box = Gtk.EventBox()
        label = Gtk.Label("Test")   
        box.add(label)
        box.connect("enter-notify-event", self.on_mouse)
        self.add(box)
        self.show_all()

    def on_mouse(self, widget, data=None):
        print widget, data

    def main(self):
        Gtk.main()

if __name__ == "__main__":
    Foo().main()
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!