在Layout子元素中启用PyGTK Eventbox的motion-notify-event

1 投票
1 回答
2254 浏览
提问于 2025-04-15 21:24

我注意到,当把一个事件框(Eventbox)放进一个布局(Layout)里时,有些事件会被漏掉。不过,如果把它放进一个固定的(Fixed)布局里,就不会出现这个问题。为了尝试恢复那些漏掉的事件,我用了一种方法,但没有成功:

import pygtk
import gtk


def foo(widget, event):

    print event


pygtk.require('2.0')
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect('destroy', lambda x: gtk.main_quit())

eventbox = gtk.EventBox()
eventbox.connect('button-press-event', foo)   # works
eventbox.connect('motion-notify-event', foo)  # fail
eventbox.set_events(
    gtk.gdk.BUTTON_MOTION_MASK|               # restoring missed masks
    gtk.gdk.BUTTON1_MOTION_MASK|
    gtk.gdk.BUTTON2_MOTION_MASK|
    gtk.gdk.BUTTON3_MOTION_MASK)

layout = gtk.Layout()
image = gtk.image_new_from_file('/home/me/picture.jpg')

layout.add(image)
eventbox.add(layout)
window.add(eventbox)

window.show_all()
gtk.main()

我该怎么做才能恢复那些漏掉的事件呢?

1 个回答

1

你粘贴的代码对我来说运行得很好。当我按下鼠标的按钮1并在窗口上拖动时,它会生成并在终端上打印出运动事件。

我甚至把eventbox.set_events(...)这一行去掉了,它依然可以正常工作。

那到底是什么问题呢?

撰写回答