Gtk 标签不会触发鼠标事件

Gtk 标签不会触发鼠标事件,gtk,pygtk,Gtk,Pygtk,在pygtk引用中,它声明每个Gtk.Widget都有该事件,但对于我的测试代码,该事件从未为标签小部件触发(对于其他小部件,它已经工作) 有什么我应该做的不同吗 导入pygtk pygtk.require('2.0') 进口gtk 类别标签测试: def delete_事件(自身、小部件、事件、数据=无): 返回错误 def destroy(self,widget,data=None): gtk.main_quit() 定义初始化(自): self.window=gtk.window(gtk.

在pygtk引用中,它声明每个
Gtk.Widget
都有该事件,但对于我的测试代码,该事件从未为标签小部件触发(对于其他小部件,它已经工作)

有什么我应该做的不同吗

导入pygtk
pygtk.require('2.0')
进口gtk
类别标签测试:
def delete_事件(自身、小部件、事件、数据=无):
返回错误
def destroy(self,widget,data=None):
gtk.main_quit()
定义初始化(自):
self.window=gtk.window(gtk.window\u顶层)
self.window.connect(“删除事件”,self.delete\u事件)
self.window.connect(“销毁”,self.destroy)
self.window.设置边框宽度(10)
self.label=gtk.label(“A标签”)
#问题部分
def labelMouseOver(w,数据=无):
打印“鼠标悬停”
self.label.connect('enter-notify-event',labelMouseOver,None)
#/问题部分
self.window.add(self.label)
self.label.show()
self.window.show()
def主(自):
gtk.main()
如果名称=“\uuuuu main\uuuuuuuu”:
测试=标签测试()
test.main()

好的,我找到了解决方案,和这里的一样:。由于一些不明显的原因,一些小部件无法自行响应信号,需要在其周围额外设置一个框。我已经用一种我可以做到的方式重写了代码示例——即使用导入来更新GTK 3.0,并通过从
GTK.Window
派生出一种更面向对象的样式。还有人可能更喜欢实例方法而不是嵌套方法

从gi.repository导入Gtk
Foo类(Gtk.窗口):
定义初始化(自):
Gtk.Window.\uuuu初始化\uuuuu(自)
自我连接(“销毁”,Gtk.main_退出)
自行设置边框宽度(50)
box=Gtk.EventBox()
标签=Gtk.标签(“测试”)
框。添加(标签)
box.connect(“输入通知事件”,鼠标上的self
self.add(框)
self.show_all()
鼠标上的def(self,widget,data=None):
打印小部件、数据
def主(自):
Gtk.main()
如果名称=“\uuuuu main\uuuuuuuu”:
Foo().main()

由于性能原因,某些小部件并不拥有自己的X窗口,因为它们大多是装饰性的,通常不需要处理X事件信号。您可以找到完整的列表

在这些情况下,建议使用包装无窗口小部件(EventBox是专门为此目的构建的)