Gtk 开关激活信号未触发

Posted

技术标签:

【中文标题】Gtk 开关激活信号未触发【英文标题】:Gtk Switch activate signal not firing 【发布时间】:2011-10-30 13:26:42 【问题描述】:

我正在尝试在应用程序中使用 Gtk.Switch 小部件,但“激活”信号未通过点击触发。 在使用带有键盘的小部件时,它可以正常工作,方法是在其上按回车/空格键,但点击不会触发“激活”事件。

任何想法为了注册 Gtk.Switch 上的点击信号需要做什么

from gi.repository impoty Gtk, GObject

def my_callback(widget, data=None):
    print 'Event Fired'

switch = Gtk.Switch()
window = Gtk.Window()
window.add(switch)
switch.connect('activate', my_callback)
window.show_all()
GObject.MainLoop().run()

【问题讨论】:

其实这和PyGTK没有关系,而是和GObject有关。 PyGTK 适用于 GTK 2.X。 【参考方案1】:

其实更好的方法是连接到 notify::active 事件。

【讨论】:

使用它而不是“按钮按下事件”的好处是,如果通过另一种方法切换开关,它将正常工作,例如按键/可访问性框架。 是的,我同意。让它 switch.connect('notify::active', my_callback) for python glade 用户注意:我花了很长时间研究如何为“listen::active”注册一个处理程序,所以这可能对其他 glade 用户有用。如果你使用 glade,你会注意到信号列表中似乎没有“notify::active”,这是因为它是一个 GObject 信号“listen”,使用“Detail”列添加第二个参数“active”为“listen::active”注册一个处理程序。【参考方案2】:

好的,看了几天,我在这里问了这个问题,5分钟后找到了答案。

要注册鼠标点击,必须使用“button-press-event”信号而不是“activate”信号。

可能会帮助遇到类似问题的人。

GTK 需要更好的文档。

【讨论】:

在 bugzilla.gnome.org 上提交补丁,以改善文档中的这一特殊漏洞! ;-) -1 通常,您不应该依赖具体的输入法,除非您正在制作自己的组件。我认为您想要做的是在开关更改其状态(通过键盘、拖动等)时得到通知,而不是在用户用鼠标单击时得到通知。 请参阅 Kknd 的答案。

以上是关于Gtk 开关激活信号未触发的主要内容,如果未能解决你的问题,请参考以下文章

仅在选中时读取 GTK 单选按钮信号

matlab仿真中flip-flop如何控制开关管

怎么模拟自动触发触摸电路

信号从 gtkmm 弹出列表中触发两次

Djoser:触发用户帐户激活操作

simulink上升沿触发怎么设计