为无限循环脚本创建MATLAB GUI

时间:2019-05-24 19:25:06

标签: matlab matlab-guide matlab-app-designer

我目前正在使用MATLAB脚本调用manager.m。该脚本包含一个无限循环,该循环监视通信线程中的传入命令。

我想为此程序创建一个状态窗口,以便用户知道其功能正常(例如,指示良好的连接状态,当前状态等)。请注意,我不希望用户能够从此GUI输入任何信息,它的唯一目的是用作显示。

我继续使用App Designer程序创建了一个简单的GUI。我将manager.m脚本转换为在GUI启动期间调用的函数。

但是,我遇到一个问题,因为该函数包含一个无限循环,所以关闭GUI实际上不会终止该函数。本质上,该功能只是保持循环/执行。

在尝试解决该问题几次失败之后,我觉得我没有像通常使用的那样使用GUI App Designer。似乎应用负责循环方面,并在必要时仅监视用户输入的执行事件。通过将自己的无限循环添加到管理器函数中,似乎使一切变得复杂了。

所以我的问题是:如果要为无限循环的MATLAB脚本创建状态显示,执行此操作的首选方法是什么?

2 个答案:

答案 0 :(得分:2)

如果只想结束循环,可以使用以下解决方案:

  1. 添加到图中,关闭setappdata(0, 'do_end_loop', 1);命令,如下所示:

    function figure1_CloseRequestFcn(hObject, eventdata, handles)
    % hObject    handle to figure1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    setappdata(0, 'do_end_loop', 1);
    
    % Hint: delete(hObject) closes the figure
    delete(hObject);
    
  2. 在无限循环中,使用do_end_loop = getappdata(0, 'do_end_loop');,并添加一些逻辑来打破循环。
    以下代码示例是一个无限循环的示例,该循环可以完成一些工作,并且在用户关闭GUI时会中断:

    setappdata(0, 'do_end_loop', 0);
    
    counter = 0;
    while (1)
        do_end_loop = getappdata(0, 'do_end_loop');
    
        if (do_end_loop)
            break;
        end   
    
        handles.text1.String = num2str(counter);
        counter = counter + 1;
    
        pause(0.1);
    end
    

(我将循环放在按钮的回调中)。

答案 1 :(得分:0)

再多考虑一下,我意识到MATLAB App Designer可以用作“设计器”。我继续并创建了显示屏幕,然后单击“查看代码”选项。

如果向下滚动代码,则可以找到用于初始化所有用户界面组件的部分。您只需复制此代码并将其粘贴到您自己的脚本中即可。

该方法允许您使用MATLAB拖放设计器来生成用户界面代码,同时允许您通过脚本控制自己的程序流。