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

并在行动中展示它: