"Error using get" 在 Matlab GUI 中使用 'addlistener' 函数
"Error using get" using a 'addlistener' function in Matlab GUI
我在 Matlab GUI 代码中遇到问题。例如,我想在控制台中显示 GUI 中滑块光标的值。但事实是我想实时显示它,例如在光标的每个位置,即使点击仍在,同时移动它。
为此,我在网上看到 'addlistener' 函数可以帮助我。我像这样把它放在 slider_CreateFcn 函数中:
function slider1_CreateFcn(hObject, eventdata, handles)
h=addlistener(hObject,'Value','PostSet',@(~,~)slider1_Callback)
然后,我在回调函数中添加了一个简单的disp函数,像这样:
function slider1_Callback(hObject, eventdata, handles)
get(hObject,'value')
运行 此代码引发此错误:
Warning: Error occurred while executing callback:
Error using get
Cannot find 'get' method for matlab.graphics.internal.GraphicsMetaProperty class.
Error in untitled>slider1_Callback (line xx)
get(hObject,'value')
如果我删除addlistener
功能,显然更新不再是实时的,但我没有收到错误消息。所以我认为问题直接来自 addlistener
函数。
这是怎么回事,我该如何解决?
首先,您发布的代码不是产生错误的代码。我猜产生错误的代码如下所示:
h = addlistener(hObject, 'Value', 'PostSet', @slider1_Callback);
在这种情况下,元 属性 作为第一个输入参数传递给 slider1_Callback
,这会立即给您带来您所看到的错误。
话虽如此,如果您想调用 slider1_Callback
,您需要制作一个匿名函数,该函数实际上将正确类型(和数量)的输入传递给回调函数。这是一个可以做到这一点的人。
function slider1_CreateFcn(hObject, eventdata, handles)
h = addlistener(hObject, 'Value', 'PostSet', ...
@(src,evnt)slider1_Callback(hObject, [], handles))
end
不过,更好的做法是只使用 单独的 回调,而不是 GUIDE 为您创建的回调。这给了你更多的灵活性。此外,如果您只想显示值,则不需要所有其他输入,您实际上可以内联整个回调,而不是使用单独的函数。
h = addlistener(hObject, 'Value', 'PostSet', @(s,e)disp(get(hObject, 'Value')));
并在行动中展示它:
我在 Matlab GUI 代码中遇到问题。例如,我想在控制台中显示 GUI 中滑块光标的值。但事实是我想实时显示它,例如在光标的每个位置,即使点击仍在,同时移动它。
为此,我在网上看到 'addlistener' 函数可以帮助我。我像这样把它放在 slider_CreateFcn 函数中:
function slider1_CreateFcn(hObject, eventdata, handles)
h=addlistener(hObject,'Value','PostSet',@(~,~)slider1_Callback)
然后,我在回调函数中添加了一个简单的disp函数,像这样:
function slider1_Callback(hObject, eventdata, handles)
get(hObject,'value')
运行 此代码引发此错误:
Warning: Error occurred while executing callback:
Error using get
Cannot find 'get' method for matlab.graphics.internal.GraphicsMetaProperty class.
Error in untitled>slider1_Callback (line xx)
get(hObject,'value')
如果我删除addlistener
功能,显然更新不再是实时的,但我没有收到错误消息。所以我认为问题直接来自 addlistener
函数。
这是怎么回事,我该如何解决?
首先,您发布的代码不是产生错误的代码。我猜产生错误的代码如下所示:
h = addlistener(hObject, 'Value', 'PostSet', @slider1_Callback);
在这种情况下,元 属性 作为第一个输入参数传递给 slider1_Callback
,这会立即给您带来您所看到的错误。
话虽如此,如果您想调用 slider1_Callback
,您需要制作一个匿名函数,该函数实际上将正确类型(和数量)的输入传递给回调函数。这是一个可以做到这一点的人。
function slider1_CreateFcn(hObject, eventdata, handles)
h = addlistener(hObject, 'Value', 'PostSet', ...
@(src,evnt)slider1_Callback(hObject, [], handles))
end
不过,更好的做法是只使用 单独的 回调,而不是 GUIDE 为您创建的回调。这给了你更多的灵活性。此外,如果您只想显示值,则不需要所有其他输入,您实际上可以内联整个回调,而不是使用单独的函数。
h = addlistener(hObject, 'Value', 'PostSet', @(s,e)disp(get(hObject, 'Value')));
并在行动中展示它: