1

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

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

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

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

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

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

4

2 回答 2

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
    

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

于 2019-05-24T20:46:19.387 回答
0

再想一想,我意识到 MATLAB App Designer 可以只是用作“设计器”。我继续创建我的显示屏幕,然后单击“查看代码”选项。

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

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

于 2019-05-24T21:35:31.397 回答