为无限循环脚本创建 MATLAB GUI

Creating a MATLAB GUI for an infinite looping script

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

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

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

但是,我 运行 遇到一个问题,因为该函数包含一个无限循环,关闭 GUI 并不会真正终止该函数。本质上,函数只是保持 looping/executing.

在多次尝试修复问题失败后,我觉得我没有像通常那样使用 GUI App Designer。应用程序似乎负责循环方面,并在必要时简单地监视用户输入以执行事件。通过将我自己的无限循环添加到管理器函数中,它似乎使一切复杂化。

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

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

  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
    

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

仔细想想,我意识到 MATLAB App Designer 可以用作 "designer"。我继续创建我的显示屏幕,然后单击 "View Code" 选项。

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

此方法允许您使用 MATLAB drag-and-drop 设计器生成用户界面代码,同时允许您通过脚本控制自己的程序流。