我使用GUIDE创建了GUI。我在一组中有3个radiobuttons。当我运行程序并输入值进行一些计算后,我会得到压力,温度,升力/阻力的图(取决于我推动的无线电按钮)。程序结构如下:
主要代码(GUI): 在按下“计算”按钮后,将值传递给名为Apollo的函数。
阿波罗代码: 包含子函数,用于计算压力,温度和升力/阻力计算的必要值。最后一个子函数称为plot_data。该功能在一个图中绘制航天器的形状,并在选择相应的辐射按钮时绘制另一个图中的压力,温度,升力/阻力。
问题 - 我是编程GUI的新手。我在确定如何确定从GUI中选择哪个单选按钮并使用某种逻辑作为我的plot_data函数中的开关时遇到了问题。我希望select case在plot_data函数中。
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果您想在用户点击radiobutton后执行某些操作,则应编辑对象的“回调”属性。
如果要从代码中测试radiobutton的状态,则应选中“Value”属性。它将是一个选定按钮,否则为零。
查看this教程
答案 1 :(得分:0)
假设您的radiobutton句柄为rb1
和rb2
,它们存储在handles
结构中。然后,您可以使用'Value'
属性检查它们是否已被选中。
function apollo(hObj, eventdata, handles)
if get(handles.hrb1, 'Value')
% do stuff
elseif get(handles.hrb2, 'Value')
% do other stuff
end
end
更新:回应OP关于SelectionChangeFcn
的评论:
如果您没有大量数据,可以在开头绘制所有数据,然后更改绘图的Visible
属性。
function cbSelectionChange(hObj, eventdata, handles)
rbTag = get(eventData.NewValue, 'Tag');
switch rbTag
case 'rb1'
set(handles.plotHandle1, 'Visible', 'On');
set(handles.plotHandle2, 'Visible', 'Off');
case 'rb2'
set(handles.plotHandle2, 'Visible', 'On');
set(handles.plotHandle1, 'Visible', 'Off');
end
end
如果您有大量数据,可以从SelectionChangeFcn
回调调用plot_data函数。
function cbSelectionChange(hObj, eventdata, handles)
rbTag = get(eventData.NewValue, 'Tag');
switch rbTag
case 'rb1'
plot_data(yourArguments1);
case 'rb2'
plot_data(yourArguments2);
end
end
除非您修改数据,否则传递数据不会影响您的代码性能。道格赫尔说here:
MATLAB使用通常称为“写时复制”的系统来避免制作 函数工作区内的输入参数的副本,直到或 除非您修改输入参数。如果您不修改输入 参数,MATLAB将避免复制。