在另一个功能中使用所选单选按钮

时间:2013-01-15 03:00:59

标签: matlab switch-statement matlab-guide

我使用GUIDE创建了GUI。我在一组中有3个radiobuttons。当我运行程序并输入值进行一些计算后,我会得到压力,温度,升力/阻力的图(取决于我推动的无线电按钮)。程序结构如下:

主要代码(GUI): 在按下“计算”按钮后,将值传递给名为Apollo的函数。

阿波罗代码: 包含子函数,用于计算压力,温度和升力/阻力计算的必要值。最后一个子函数称为plot_data。该功能在一个图中绘制航天器的形状,并在选择相应的辐射按钮时绘制另一个图中的压力,温度,升力/阻力。

问题 - 我是编程GUI的新手。我在确定如何确定从GUI中选择哪个单选按钮并使用某种逻辑作为我的plot_data函数中的开关时遇到了问题。我希望select case在plot_data函数中。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

  • 如果您想在用户点击radiobutton后执行某些操作,则应编辑对象的“回调”属性。

  • 如果要从代码中测试radiobutton的状态,则应选中“Value”属性。它将是一个选定按钮,否则为零。

  • 查看this教程

答案 1 :(得分:0)

假设您的radiobutton句柄为rb1rb2,它们存储在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将避免复制。