checkbox object IF 语句无法识别 MATLAB GUIDE 中的变量
checkbox object IF statement does not recognize the variables in MATLAB GUIDE
各位。可能我在这里犯了一个非常愚蠢的错误,但问题是:
我使用 MATLAB GUIDE 制作了一个 GUI。我在 GUI 中添加了一些复选框,如果选中,它们将在 axes2 上绘制一些东西,否则将其删除。如果你问的话,还会有其他情节,所以会有断断续续的情况。它是这样工作的:
function checkbox1_Callback(hObject, eventdata, handles)
% Hint: get(hObject,'Value') returns toggle state of checkbox1
if get(hObject, 'Value') == 1
axes(handles.axes2);
x = handles.x;
distanceX_Plot = evalin('base', 'CAN2_MPC_C19_Dist_X_VehObj0_Cval_MPC');
hold on;
distanceX_Plotted = plot(x,distanceX_Plot, 'r');
legend('Distance X')
hold off;
else
delete(distanceX_Plotted);
end
但是 IF 部分中的 distanceX_Plotted 带有下划线并表示变量可能未使用,而 ELSE 语句中的第二个 distanceX_Plotted 表示变量可以在定义之前使用。
完整的错误是这样的:
未定义函数或变量'distanceX_Plotted'。
无标题错误>checkbox1_Callback(第 224 行)删除(distanceX_Plotted);
gui_mainfcn 错误(第 95 行)feval(varargin{:});
无标题错误(第 42 行)gui_mainfcn(gui_State, varargin{:});
错误 matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)untitled('checkbox1_Callback',hObject,eventdata,guidata(hObject)) 评估 UIControl 回调时出错
感谢您的帮助。
您当前的函数将:
创建一组轴并绘制数据。可以使用句柄 distanceX_Plotted
.
访问此图
尝试删除 distanceX_Plotted
,它不存在,因为它没有进入 if-else 块的第一部分。
如果你想在轴 handle.axis2
上绘制或删除它,你需要在想要的轴上绘制,或删除轴(而不是绘图):
function checkbox1_Callback(hObject, eventdata, handles)
% Hint: get(hObject,'Value') returns toggle state of checkbox1
if get(hObject, 'Value') == 1
x = handles.x;
distanceX_Plot = evalin('base', 'CAN2_MPC_C19_Dist_X_VehObj0_Cval_MPC');
hold on;
distanceX_Plotted = plot(x,distanceX_Plot, 'r','Parent', handles.axes2); % modified
legend('Distance X')
hold off;
else
delete(handles.axes2); % modified
end
编辑:如果您想删除绘制的最后一行,请在 else
块中写入:
if ~isempty(handles.axes2.Children)
delete(handles.axes2.Children(end));
end
它将删除您在 axes2
上打印的最后一行。
各位。可能我在这里犯了一个非常愚蠢的错误,但问题是:
我使用 MATLAB GUIDE 制作了一个 GUI。我在 GUI 中添加了一些复选框,如果选中,它们将在 axes2 上绘制一些东西,否则将其删除。如果你问的话,还会有其他情节,所以会有断断续续的情况。它是这样工作的:
function checkbox1_Callback(hObject, eventdata, handles)
% Hint: get(hObject,'Value') returns toggle state of checkbox1
if get(hObject, 'Value') == 1
axes(handles.axes2);
x = handles.x;
distanceX_Plot = evalin('base', 'CAN2_MPC_C19_Dist_X_VehObj0_Cval_MPC');
hold on;
distanceX_Plotted = plot(x,distanceX_Plot, 'r');
legend('Distance X')
hold off;
else
delete(distanceX_Plotted);
end
但是 IF 部分中的 distanceX_Plotted 带有下划线并表示变量可能未使用,而 ELSE 语句中的第二个 distanceX_Plotted 表示变量可以在定义之前使用。
完整的错误是这样的:
未定义函数或变量'distanceX_Plotted'。
无标题错误>checkbox1_Callback(第 224 行)删除(distanceX_Plotted);
gui_mainfcn 错误(第 95 行)feval(varargin{:});
无标题错误(第 42 行)gui_mainfcn(gui_State, varargin{:});
错误 matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)untitled('checkbox1_Callback',hObject,eventdata,guidata(hObject)) 评估 UIControl 回调时出错
感谢您的帮助。
您当前的函数将:
创建一组轴并绘制数据。可以使用句柄
distanceX_Plotted
. 访问此图
尝试删除
distanceX_Plotted
,它不存在,因为它没有进入 if-else 块的第一部分。
如果你想在轴 handle.axis2
上绘制或删除它,你需要在想要的轴上绘制,或删除轴(而不是绘图):
function checkbox1_Callback(hObject, eventdata, handles)
% Hint: get(hObject,'Value') returns toggle state of checkbox1
if get(hObject, 'Value') == 1
x = handles.x;
distanceX_Plot = evalin('base', 'CAN2_MPC_C19_Dist_X_VehObj0_Cval_MPC');
hold on;
distanceX_Plotted = plot(x,distanceX_Plot, 'r','Parent', handles.axes2); % modified
legend('Distance X')
hold off;
else
delete(handles.axes2); % modified
end
编辑:如果您想删除绘制的最后一行,请在 else
块中写入:
if ~isempty(handles.axes2.Children)
delete(handles.axes2.Children(end));
end
它将删除您在 axes2
上打印的最后一行。