【问题标题】:pygtk: how to manually emit signalpygtk:如何手动发出信号
【发布时间】:2011-04-12 16:42:45
【问题描述】:

我有一个gtk.Entry() 对象,我想手动发出focus-out-event。我需要传递给emit 方法的第二个参数是什么?

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

【问题讨论】:

  • 为什么要发出 focus-out-event ?何时(或何地)?它在另一个事件的处理程序中吗?

标签: python gtk pygtk


【解决方案1】:

您需要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

您可以在我上面链接的页面上查找不同类型的事件以及它们需要哪些参数。

【讨论】:

  • 是的,这就是错误消息所说的:-)。但是我从哪里得到这样的对象呢?我自己创造吗?有什么属性?这取决于我想要发出的信号吗?
  • 事件对象是为了处理程序的利益。您应该在发出信号时创建它。如果您的处理程序不使用它,您可以尝试只传递一个空对象。但也许你不能假设你是唯一的处理程序。请参阅我对答案的编辑。
猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多