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
) 不再位于路径上并且能够第二次单击按钮时会找到。
如果您想停止这种行为,您有两个选择
首选选项是将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)
如果您无法修改 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');
我有一个简单的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
) 不再位于路径上并且能够第二次单击按钮时会找到。
如果您想停止这种行为,您有两个选择
首选选项是将
中使用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)
如果您无法修改
也能将目录改回原样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');