Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 作为布局子级时启用PyGTK Eventbox运动通知事件_Python_Gtk_Pygtk_Gnome - Fatal编程技术网

Python 作为布局子级时启用PyGTK Eventbox运动通知事件

Python 作为布局子级时启用PyGTK Eventbox运动通知事件,python,gtk,pygtk,gnome,Python,Gtk,Pygtk,Gnome,我注意到当一个Eventbox被添加到一个布局中时,一些事件丢失了,这不会发生。例如,将它添加到一个固定的(非常类似的小部件)中,我尝试以这种方式恢复事件掩码,但没有成功: import pygtk import gtk def foo(widget, event): print event pygtk.require('2.0') window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.connect('destroy', lambda

我注意到当一个Eventbox被添加到一个布局中时,一些事件丢失了,这不会发生。例如,将它添加到一个固定的(非常类似的小部件)中,我尝试以这种方式恢复事件掩码,但没有成功:

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并拖动窗口时,它会生成运动事件并将其打印到终端

我甚至删除了
eventbox.set\u events(…)
调用,它仍然可以工作


有什么问题吗?

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

我甚至删除了
eventbox.set\u events(…)
调用,它仍然可以工作


那么问题出在哪里?

好的,谢谢您的试用,我将尝试重新启动电脑或在更新的GTK中测试它(我有2.16.1版)。。。您使用的是什么版本?@mkotechno:pygtk 2.16、gtk 2.18、glib 2.22、cairo 1.8.8、pygobject 2.18、python 2.6.4我尝试使用gtk 2.20,效果也很好,但为了保持向后兼容性,我应该在代码中更改什么?或者可能是一个GTK错误?好的,谢谢你的尝试,我会尝试重新启动电脑或在一个更新的GTK中测试它(我有2.16.1)。。。您使用的是什么版本?@mkotechno:pygtk 2.16、gtk 2.18、glib 2.22、cairo 1.8.8、pygobject 2.18、python 2.6.4我尝试使用gtk 2.20,效果也很好,但为了保持向后兼容性,我应该在代码中更改什么?或者可能是GTK bug?