在Matlab GUI中使用'addlistener'函数“使用get时出错”

时间:2016-05-19 19:26:55

标签: matlab user-interface get matlab-figure

我在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函数。

发生了什么,我该如何解决?

1 个答案:

答案 0 :(得分:1)

首先,您发布的代码不是产生错误的代码。我猜测产生错误的代码看起来像这样:

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

并展示它的实际效果:

enter image description here