MATLAB GUI - 按钮按下返回错误

MATLAB GUI - Button Press returning error

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

但是当我按下这个按钮两次时,它抛出了一个错误

Undefined function 'GUI' for input arguments of type 'struct'.

Error in @(hObject,eventdata)GUI('pushbutton1_Callback',hObject,eventdata,guidata(hObject))

Error while evaluating uicontrol Callback

% --- 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');

问题是 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');