2011-04-10 78 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