user-interface - 交互式八度图中的多个滑块
问题描述
我正在尝试创建一个可以使用滑块修改多个变量的 GUI。这是我到目前为止的例子:我试图通过对两个滑块求和来改变线性函数的梯度。
我对 octave 和 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, 100]);
%% Add ui 'slider' element
hslider = uicontrol ( ...
'style', 'slider', ...
'Units', 'normalized', ...
'position', [0.1, 0.1, 0.8, 0.1], ...
'min', -100, ...
'max', 100, ...
'value', 0, ...
'callback', {@plotstuff} ...
);
%% Add ui 'slider' element
kslider = uicontrol ( ...
'style', 'slider', ...
'Units', 'normalized', ...
'position', [0.1, 0, 0.8, 0.1], ...
'min', -100, ...
'max', 100, ...
'value', 0, ...
'callback', {@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, y);
axis ([-100, 100, -100, 100]);
end
这是我的错误信息:
㎫ >> 错误:运算符 *:不一致的参数(op1 是 0x0,op2 是 1x101)错误:从 octave_test>plotstuff 在第 43 行第 5 列调用错误:运算符 *:不一致的参数(op1 是 0x0,op2 是 1x101)错误:调用来自 octave_test>plotstuff 在第 43 行第 5 列
这是图形窗口:
解决方案
function plotstuff (h, k, event)
这个签名是错误的。回调函数的第一个参数是滑块对象的句柄。第二个论点是事件。没有第三个论点。这是正确的形式:
function plotstuff(h, event)
在此回调中,h
等于hslider
或kslider
(返回的数字uicontrol
)。
您在这里有多种选择。您可以制作hslider
和kslider
全局,就像您对 所做的那样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, 'callback', {@plotstuff, hslider, kslider})
然后你可以使用这些参数plotstuff
:
function plotstuff (handle, event, hslider, kslider)
n = get(hslider, 'value');
m = get(kslider, 'value');
推荐阅读
- spring-boot - 尝试访问 putmapping url 时禁止响应
- php - 如何更改表格内容而不是转到目录
- javascript - 更改 'Window.location.href' 时删除存储在 'window' 对象上的属性
- scala - 使用 doobie 阅读
- php - Wordpress Customizer 不断隐藏自定义部分
- r - Shiny App 在本地工作,但不在 ShinyApps.io 服务器上
- curl - POST 方法 Clockify API 遇到问题
- gstreamer - 如何使用 gstreamer 在 HTTP 上流式传输视频并使用 VLC 播放器进行测试
- flutter - 使用 if 语句颤振 CrossAxisAlignment
- python - 在搜索表单中输入错误的查询 get's me keyerror with pandas 和 django