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 开关激活信号未触发的主要内容,如果未能解决你的问题,请参考以下文章