标签不会触发鼠标事件 [英] Label does not trigger mouse event

查看:113
本文介绍了标签不会触发鼠标事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在pygtk参考中,它指出每个 Gtk.Widget 都有事件 enter-event-notify ,但是使用我的测试代码,该事件永远不会为Label组件启动



有什么我应该做的不同吗?

  import pygtk 
pygtk.require('2.0')
import gtk

class LabelTest:
$ b $ def delete_event( self,widget,event,data = None):
return False

def destroy(self,widget,data = None):
gtk.main_quit()

def __init __(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

self.window.connect(delete_event,self.delete_event)
self.window.connect(destroy,self.destroy)
self.window.set_border_width(10)

self.label = gtk.Label(A label)

#question section
def labelMouseOver(w,data = None):
printmouse over

self.label.connect('enter-notify-event',labelMouseOver,None)
#/问题部分

self.window.add(self.label)
self.label.show()
self.window.show()

def main(self):
gtk.main()

if __name__ ==__main__:
test = LabelTest()
test.main()

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



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


In the pygtk reference it states that every Gtk.Widget has the event enter-event-notify, but with my test code that event is never fired for the Label widget (with others it has worked).

Is there something I should do differently?

import pygtk
pygtk.require('2.0')
import gtk

class LabelTest:

    def delete_event(self, widget, event, data=None):
        return False

    def destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        self.window.connect("delete_event", self.delete_event)
        self.window.connect("destroy", self.destroy)
        self.window.set_border_width(10)

        self.label = gtk.Label("A label")

        # question section
        def labelMouseOver(w, data=None):
          print "mouse over"

        self.label.connect('enter-notify-event', labelMouseOver, None)
        # /question section

        self.window.add(self.label)
        self.label.show()
        self.window.show()

    def main(self):
        gtk.main()

if __name__ == "__main__":
    test = LabelTest()
    test.main()

解决方案

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

这篇关于标签不会触发鼠标事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆