2011-04-10 76 views
1

我有一個gtk.Entry()對象,我想手動發射focus-out-event。我需要傳遞給emit方法的第二個參數是什麼?pygtk:如何手動發射信號

In [10]: d.emit('focus-out-event') 
TypeError: 1 parameters needed for signal focus-out-event; 0 given 

In [11]: d.emit('focus-out-event', d) 
TypeError: could not convert type gtk.Entry to GdkEvent required for parameter 0 
+0

爲什麼你想發出'focus-out-event'?和什麼時候(或哪裏)?它是否在另一個事件的處理程序中? – saeedgnu 2011-04-11 06:30:44

回答

2

您需要一個gtk.gdk.Event作爲第二個參數。

這裏是你如何創建一個:(聲明,我沒有測試這個)

event = gtk.gdk.Event(gtk.gdk.FOCUS_CHANGE) 
event.window = entry.get_window() # the gtk.gdk.Window of the widget 
event.send_event = True # this means you sent the event explicitly 
event.in_ = False # False for focus out, True for focus in 

你可以看一下不同類型的事件,他們需要我聯繫到上述網頁上的哪個參數。

+0

是的,這就是錯誤信息所說的:-)。但是我從哪裏得到這樣的對象呢?我自己創建它嗎?具有什麼屬性?它取決於我想要發出的信號嗎? – Nikratio 2011-04-11 15:17:43

+0

事件對象是爲處理程序的利益。當你發出信號時你應該創建它。如果你的處理程序不使用它,你可以嘗試傳遞一個空對象。但也許你不能認爲你是唯一的處理者。看到我的編輯答案。 – ptomato 2011-04-12 08:39:54