我有一个简单的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');
答案 0 :(得分:1)
问题是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');