Gio.SimpleAction不发出变化状态信号

时间:2018-01-23 19:07:30

标签: python gtk gtk3 gio

我正在尝试创建Gio.SimpleAction并连接到其change-state信号,以便在状态发生变化时采取特定操作,但我未能提供正常工作的代码。

这是我尝试(并期望工作)的一个例子,没有成功:

from gi.repository import Gio, GLib

call_count = 0
def _state_changed(action, state):
    action.set_state(state)
    global call_count
    call_count += 1
    print(state)

a = Gio.SimpleAction.new_stateful('foo', None, GLib.Variant.new_boolean(False))
a.connect('change-state', _state_changed)

print a.get_state().get_boolean()
a.set_state(GLib.Variant.new_boolean(True))
print a.get_state().get_boolean()
print call_count

运行此代码的输出是:

False
True
0

正如我们所看到的,国家确实发生了变化,但没有发出变化状态!

此代码示例有问题吗?如何正确检测Gio.SimpleAction

中的状态更改

1 个答案:

答案 0 :(得分:2)

set_state()方法会影响状态更改。 change-state信号仅在响应状态更改请求时发出,来自Gio.Action.change_state()

我认为该信号主要是为了允许Gio.SimpleAction的子类将代码注入到状态变更请求的处理中。