Gio.SimpleAction 未发出更改状态信号

Posted

技术标签:

【中文标题】Gio.SimpleAction 未发出更改状态信号【英文标题】:Gio.SimpleAction not emiting change-state signal 【发布时间】:2018-07-02 16:57:30 【问题描述】:

我正在尝试创建一个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】:

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

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

【讨论】:

是的。谢谢你。将 a.set_state(GLib.Variant.new_boolean(True)) 更改为 a.change_state(...) 可以解决问题。

以上是关于Gio.SimpleAction 未发出更改状态信号的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - Bloc 仅在状态未扩展 Equatable 时发出状态

冻结的 BLoC - 产量不会向小部件发出状态更改

Java Swing:在 JTabbedPane 的未选择面板上更改隐藏的 UI 元素时发出声音

如何获得仅在 redux 状态的对象数组中的属性值更改时才发出的 Observable?

Flutter Cubit 如何发出多个状态变化

微信发出去的图片怎么删除