1

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

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

Apollo 代码:包含计算压力、温度和升/拖力计算所需值的子函数。最后一个子函数称为 plot_data。此功能在一个图形中绘制航天器的形状,并在选择相应的单选按钮时在另一个图形中绘制压力、温度、升力/阻力。

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

任何帮助,将不胜感激。

4

2 回答 2

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

  • 如果你想从你的代码中测试单选按钮的状态,你应该检查“值”属性。所选按钮为 1,否则为 0。

  • 浏览教程

于 2013-01-15T12:34:08.383 回答
0

假设您的单选按钮句柄是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

除非您对其进行修改,否则传递数据不会影响代码的性能。道格赫尔在这里说:

MATLAB 使用通常称为“写入时复制”的系统来避免在函数工作区中复制输入参数,除非您修改输入参数。如果您不修改输入参数,MATLAB 将避免制作副本。

于 2013-01-15T12:36:07.080 回答