2010-04-09 13 views
1

當一個事件盒加入到佈局的一些事件都少不了我注意到,這並不happend例如將其添加到一個固定的(非常相似的部件),我試過以這種方式恢復事件掩碼沒有成功:啓用PyGTK的事件盒運動通知事件,同時是一個佈局的孩子

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並拖動窗口時,它會生成並向終端輸出動作事件。

我甚至刪除了eventbox.set_events(...)調用,它仍然有效。

那麼問題是什麼?

+0

ok,感謝您試用它,我會嘗試重新啓動電腦或在更新的GTK(我有2.16.1)中進行測試...在哪個版本中? – mkotechno 2010-04-09 03:12:03

+1

@mkotechno:pygtk的2.16,GTK 2.18,油嘴2.22,開羅1.8.8,pygobject 2.18,蟒蛇2.6.4 – nosklo 2010-04-09 03:32:30

+0

我試着用GTK 2.20和工作正常,但出於保持向後兼容性,我應該在此代碼改變?或者可能是一個GTK錯誤? – mkotechno 2010-04-09 03:39:01