微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

交互式八度图中的多个滑块

如何解决交互式八度图中的多个滑块

我正在尝试创建一个 GUI,其中可以使用滑块修改多个变量。到目前为止,这是我的示例:我试图通过对两个滑块求和来改变线性函数的梯度。

我对八度和 matlab 的 gui 完全陌生,所以我认为存在一些基本错误

%%%%%% In file myplot.m %%%%%
function myplot

  %% Create initial figure and spiral plot
  figure;  
  axes ('position',[0.1,0.3,0.8,0.6]);
  global t;   
  t = linspace (0,100,101)
  x = t;
  y = t;
  plot (x,y);  
  axis ([-100,-100,100]);

  %% Add ui 'slider' element      
  hslider = uicontrol (                    ...
         'style','slider',...
         'Units','normalized',...
         'position',0.1,0.1],...
         'min',...
         'max',...
         'value',...
         'callback',{@plotstuff}          ...
       );
  %% Add ui 'slider' element      
  kslider = uicontrol (                    ...
         'style',{@plotstuff}          ...
       );
end

%% Callback function called by slider event
%% Also in file myplot.m (i.e. a subfunction)
function plotstuff (h,k,event)
  global t;
  n = get (h,'value');
  m = get (k,'value');
  x = t;  
  y = (n+m) * t ;
  plot (x,100]);
end

这是我的错误信息:

㎫ >> 错误:运算符 *:不一致的参数(op1 为 0x0,op2 为 1x101) 错误:从 Octave_test>plotstuff 在第 43 行第 5 列 错误:运算符 *:不一致的参数(op1 为 0x0,op2 为 1x101) 错误:从 Octave_test>第 43 行第 5 列的情节

这是图形窗口:

enter image description here

解决方法

function plotstuff (h,k,event)

这个签名是错误的。回调函数的第一个参数是滑块对象的句柄。第二个参数是事件。没有第三个论点。这是正确的形式:

function plotstuff(h,event)

在此回调中,h 等于 hsliderkslideruicontrol 返回的数字)。

这里有多种选择。您可以将 hsliderkslider 设为全局,就像对 t 所做的那样,并使用它们来获取回调中的滑块值:

%% in myplot
global hslider kslider
...

%% in plotstuff
global hslider kslider
...
n = get (hslider,'value');
m = get (kslider,'value');

如果不想使用全局变量,可以将两个句柄作为附加参数传递给回调:

%% in myplot
hslider = uicontrol(...)
kslider = uicontrol(...)

set(hslider,'callback',{@plotstuff,hslider,kslider})
set(kslider,kslider})

然后您可以在 plotstuff 中使用这些参数:

function plotstuff (handle,event,kslider)
    n = get(hslider,'value');
    m = get(kslider,'value');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。