从ValueChangingFcn中访问其他滑块的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从ValueChangingFcn中访问其他滑块的值相关的知识,希望对你有一定的参考价值。

我在图中有多个滑块,我想在其中一个更改时发布它们的值(使用机器人工具箱)。我无法访问多个滑块的值 - 尝试访问滑块值会在sliderMoving函数中出现以下错误:

Undefined variable "event1" or class "event1.Value".

代码如下:

function sliderchanging

%rosinit('129.78.214.177');
first_val = 0;
euler_v = rossubscriber('/Euler_values');
slider_v = rospublisher('/Slider_values', 'std_msgs/Float64MultiArray');
slidermsg = rosmessage(slider_v); 

eulermsg = rostopic('echo', '/Euler_values');
ypr = eulermsg.Data;
y = ypr(1);
p = ypr(2);
r = ypr(3);

fig = uifigure;
sld = uislider(fig,'Position',[20 50 260 20],'ValueChangingFcn',@(sld,event) sliderMoving(event, slidermsg, slider_v, y, p, r));
sld1 = uislider(fig,'Position',[20 80 260 20],'ValueChangingFcn',@(sld1,event1) sliderMoving(event1, slidermsg, slider_v, y, p, r));

if first_val == 0
   send(slider_v, eulermsg); 
end
sld.Limits = [y-2 y+2];
sld.Value = y;
sld.Position = [20 50 260 20];
sld1.Limits = [p-2 p+2];
sld1.Value = p;
sld1.Position = [20 80 260 20];
end

function sliderMoving(event, slidermsg, slider_v, y, p, r)
first_val = 1;

disp(event.Value)
disp(event1.Value)
slidermsg.Data = [event.Value, p, r];
send(slider_v, slidermsg)
end

这段代码有什么问题?如何从sliderMoving回调中访问所​​有可用滑块的值?

答案

您的问题是因为sliderMoving函数不知道调用工作区中变量的名称。换一种说法,

function out = func(in)
  % do something with in
end

如果我们称之为func(in1)func(in2),它们的行为就会有所不同。

在您的情况下,事件将始终在回调中被称为event

如果你想根据使用哪个滑块得到不同的行为,你应该根据回调的前两个输入(commonlysrceventData),或者通过一些额外的输入参数(你已经这样做)来决定。如果需要访问其他滑块的值,可以使用event.Source.Parent.otherSld执行此操作。

您还应该注意,在回调中找到的语句first_val = 1;对回调之外的值没有影响。你应该读一下nested functions

我想这就是你的意思:

function sliderchanging
...
fig = uifigure;
...

  function sliderMoving(...)

  end
end
另一答案

正如错误消息所示,event1不是变量或类。您不能复制滑块代码并在每个条目后放置1。

我建议你看看events上的MATLAB文档。你必须在两个滑块定义中使用event,并为每个滑块使用不同的回调,或者如果你使用相同的回调,那么你需要找到一些识别哪个滑块触发了回调。

以上是关于从ValueChangingFcn中访问其他滑块的值的主要内容,如果未能解决你的问题,请参考以下文章

更新反应材料 ui 滑块的状态/值不起作用

是否可以根据其他表单的输入来更改 HTML5 范围滑块的最小值和最大值?

如何获取在kivy中定义在屏幕小部件内的滑块的值

如何将 jQuery 滑块的值保存到 Person 模型中?

R:带有时间滑块的地图?

点击单元格按钮时如何更新单元格滑块的值?