matlab - 多个属性监听器等待两者触发回调

标签 matlab properties callback listeners

我在 Matlab 中遇到了一些关于属性监听器的问题。我已将监听器添加到轴的 XLimYLim 属性,在 PostSet 上触发:

h = addlistener(myaxes,{'XLim','YLim'},'PostSet',@myfunc);

现在我希望我的程序在两个属性都发生变化后执行某些操作,或者如果只有一个属性发生变化,但在后一种情况下,我必须确保另一个没有发生变化。

当在轴上使用缩放工具时,属性总是同时改变,并且总是按照 x,然后是 y 的顺序改变。所以在这种情况下我不会有问题,但有时我以编程方式设置 XLimYLim 属性并希望触发相同的功能。我必须以某种方式判断是这两个属性中只有一个触发了监听器还是两者都触发了。

在当前阶段,我的回调执行了两次:一次针对 XLim,一次针对 YLim。我希望它只执行一次,并且恰好在我知道这两个属性没有进一步变化之后。你知道怎么做吗?

最佳答案

我不相信可以直接检测到“同时”set,因为实际的属性分配,而不仅仅是 PostSet 事件,是单独执行的,并且没有其他信息传递给 PostSet 回调,让您知道另一个即将到来。在第一个回调中的断点处停止,轴完全更新到它们的新 XLim 而没有任何迹象表明 YLim 即将发生变化。

根据您对代码使用方式的假设以及您的优先级,有多种方法可以组合出解决方法。我能想到的所有原则都至少使用以下原则之一:

  • 在某个阶段使用计时器允许可能的 YLim 分配在完成 XLim PostSet 的工作之前触发第二个回调回调
  • 为不带 YLimXLim 赋值创建一个自定义例程,以某种方式与缩放工具之类的赋值区分开来
  • 利用缩放工具首先设置 XLimMode 属性这一事实,无论其值是否发生变化。如果 XLim 的值已经是 manual,则以编程方式设置 XLim 将不会设置 XLimMode

关于matlab - 多个属性监听器等待两者触发回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31474017/

相关文章:

matlab - 抑制 Matlab 窗口焦点窃取

c# - 将自动属性转换为通知属性(WPF 中的 MVVM)

javascript - Jquery/Javascript 从具有最高属性值的数组中删除条目

javascript - 回调、返回值与HTML5 executeSql函数

matlab - R2016a : error constructing class when package & class name are equal

matlab - 在 MATLAB 中使用两个 channel 生成声音

java - MATLAB - 删除二进制文件的元素而不加载整个文件

java - 在 Java 类级注释中分配属性值

javascript - forEach 循环完成后如何调用函数?

python - 在 Python 鼠标模块中使用回调(检索事件类型)