有没有办法将 uicontrol 回调函数的输出关联到它自己的“用户数据”?

Posted

技术标签:

【中文标题】有没有办法将 uicontrol 回调函数的输出关联到它自己的“用户数据”?【英文标题】:Is there any way to associate the output of uicontrol callback function to its own 'userdata'? 【发布时间】:2014-10-12 17:25:18 【问题描述】:

例如,我的按钮 uicontrol 调用一个回调函数,'fun1_callback':

fh = figure; uicontrol(fh,'style','pushbutton','userdata',_______,'callback',@fun1_callback);

回调函数位于单独的 .m 文件中。它返回一个输出变量,'out':

function out = fun1_callback(hobj,callbackdata) out = rand(5); end

有没有直接返回'out'到按钮的'userdata'属性(下划线代表的地方)?

【问题讨论】:

如果您需要一些有效的帮助,请向我们展示一些您正在做的事情的示例代码。同时,您还可以查看setappdata 文档。 【参考方案1】:

你只需要在你的回调函数中调用set

function out = fun1_callback(hobj,evt)
   out = rand(5)
   set( hobj , 'UserData' , out )
end

之后out 的结果将在按钮的userdata 中可用。

但如果您打算访问这些用户数据,则需要按钮的句柄来检索这些数据。所以我建议你将你的按钮定义为:

btnHandle = uicontrol(fh,'style','pushbutton','userdata',[],'callback',@fun1_callback);

然后在它们被定义后检索你的userdata,你可以使用:

myValues = get(btnHandle,'UserData') ;

【讨论】:

@Hoki谢谢霍基。在回调函数中使用 set( hobj , 'UserData' , out ) 和 setappdata( hobj , 'UserData' , out ) 有什么区别吗?我猜如果使用 setappdata,'out' 不会存储在按钮的 userdata 属性中,并且在 'setappdata' 中使用的变量名可以是任何东西而不是 'userdata'? @sgyf。是的,appdatauserdata 灵活一点(这是过去的遗留物)。它们可以被命名,你可以定义任意数量(如果需要的话,超过你在图中的 uicontrol 的数量),最重要的是,调用它们你只需要提供 any 控制图形(该函数将自行计算出parent图形)。

以上是关于有没有办法将 uicontrol 回调函数的输出关联到它自己的“用户数据”?的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给 UIcontrol 回调函数

文本句柄 uicontrol 在回调函数中未正确更新

如何从matlab中用户定义的函数返回一个值,该函数的回调在uicontrol中指定

matlab中无法调用uicontrol按钮的回调

MATLAB uicontrol 回调返回矩阵

iOS事件机制(点击、手势、UIControl)