MATLAB GUI - 按钮返回错误

时间:2017-03-28 14:27:30

标签: matlab user-interface matlab-figure matlab-guide

我有一个简单的MATLAB GUI代码,找到附件。它所做的就是当按下按钮时它会运行一个功能。

然而,当我按两次此按钮时,它会抛出错误

  

未定义的函数'GUI'用于'struct'类型的输入参数。

     

@(hObject,eventdata)GUI中的错误('pushbutton1_Callback',hObject,eventdata,guidata(hObject))

     

评估uicontrol回调时出错

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 set(handles.pushbutton1, 'enable','off'); 
 output = randomFunction(); 
    a = 1

while(1)
   a = a+1
    if a == 4 
        break; 
    end

end
set(handles.pushbutton1, 'enable','on');

1 个答案:

答案 0 :(得分:1)

问题是randomFunction必须更改当前工作目录或修改PATH,以便GUI功能(GUI.m)不再在路径上并且能够找到当你第二次点击按钮时。

如果您想停止此行为,您有两个选择

  1. 首选选项是将randomFunction修改为而不是进行此修改。功能应该始终是用户的环境,使其与被调用之前的方式相同。您可以使用randomFunction

    中的onCleanup轻松完成此操作
    function randomFunction()
        folder = pwd;
        cleanup = onCleanup(@()cd(folder));
    
        % Normal contents of randomFunction
    end
    

    randomFunction中的另一个选项是永远不要使用cd。这是最佳做法。您可以使用完整文件路径来访问文件

    filename = fullfile(folder, 'image.png');
    imread(filename)
    
  2. 如果您无法修改randomFunction,您可以修改回调,以便在调用函数之前记住当前目录的内容,然后在randomFunction完成后将其更改回来。我实际上建议使用onCleanup来执行此操作,以确保即使randomFunction错误输出也会更改目录

    function pushbutton1_Callback(hObject, eventdata, handles)
        set(handles.pushbutton1, 'enable', 'off'); 
    
        % Make sure that when this function ends we change back to the current folder
        folder = pwd;
        cleanup = onCleanup(@()cd(folder));
    
        output = randomFunction(); 
        a = 1
    
        while(1)
           a = a+1
            if a == 4 
                break; 
            end
    
        end
        set(handles.pushbutton1, 'enable','on');