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 时发出状态
Java Swing:在 JTabbedPane 的未选择面板上更改隐藏的 UI 元素时发出声音