Events Gtk开关激活信号未触发

Events Gtk开关激活信号未触发,events,gtk,pygobject,gobject,Events,Gtk,Pygobject,Gobject,我试图在应用程序中使用Gtk.Switch小部件,但“激活”信号不是通过点击触发的。 通过点击键盘上的reture/space键使用小部件时,它可以正常工作,但单击不会触发“激活”事件 知道要注册Gtk.Switch上的点击信号需要做什么吗 from gi.repository impoty Gtk, GObject def my_callback(widget, data=None): print 'Event Fired' switch = Gtk.Switch() window

我试图在应用程序中使用Gtk.Switch小部件,但“激活”信号不是通过点击触发的。 通过点击键盘上的reture/space键使用小部件时,它可以正常工作,但单击不会触发“激活”事件

知道要注册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()

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

要注册鼠标点击,必须使用“按钮按下事件”信号,而不是“激活”信号

可能会帮助有类似问题的人


GTK需要更好的文档。

事实上,更好的方法是连接到notify::active event。

在bugzilla.gnome.org上提交一个补丁,以改进文档中的这一特殊错误!;-)-1通常,除非您正在制作自己的组件,否则不应该依赖具体的输入法。我想你要做的是当开关改变状态时(通过键盘、拖动等)收到通知,而不是当用户用鼠标点击时。请参阅Kknd的答案。使用此选项而不是“按钮按下事件”的好处是,如果通过另一种方法(如按键/辅助功能框架)切换开关,则它将正常工作。是的,我同意。将pythonNote的switch.connect('notify::active',my_callback)转换为glade用户:我花了很长时间考虑如何注册“listen::active”的处理程序,因此这对其他glade用户可能有用。如果您使用glade,您会注意到信号列表中似乎没有“notify::active”,这是因为它是GObject信号“listen”,请使用“Detail”列添加第二个参数“active”,以注册“listen::active”的处理程序。实际上,这与PyGTK无关,而是与GObject有关。PyGTK代表GTK2.X。