当模仿用户点击调用回调时,根 属性 回调对象没有更新?

When mimicing a user click to invoke a callback, the root property CallbackObject is not updated?

我有一个生成 GUI 的 MATLAB m 文件 (mainGUI.m):一个包含一些 uicontrol 对象(按钮、菜单等)的图形,每个对象都有一个特定的回调函数。当我在 GUI 中四处点击时,一切正常,它完全按照预期的方式工作。

现在,我有另一个 m 文件 (external.m),它在执行时调用上面的 m 文件,并模仿其中一个回调 (myCallbackfcn.m),就好像用户实际上是在按下一个按钮。下面是在 external.m:

中执行的相关代码片段
% Launch the GUI
mainGUI();

% Obtain the handles-structure, and the handle to the pushbutton
handles = guidata(findall(0,'type','figure')); 
hObject = handles.myPushButton;

% Execute the callback
myCallbackfcn(hObject,[]);

这也工作正常 - 在 myCallbackfcn 内部,hObject 确实是正确的句柄,我可以访问整个 GUI 句柄结构,等等......但是有一个缺陷,这对我的代码的目的。 root 属性 CallbackObject 为空!然而,它应该是 hObject 的句柄,当我通过单击按钮手动启动回调时就是这样。

有谁知道为什么不更新 CallbackObject?它是只读的,所以我不能强行改变它。

根对象的 CallbackObject 为空,因为您没有从实际的 GUI 事件执行回调。当您与 GUI 小部件交互时,CallbackObject 由 MATLAB 自动填充。

在您的回调中,您可以直接从您的handles 结构。

myCallbackfcn(hObject, [], handles)

function myCallbackfcn(hObject, eventdata, handles)
    callbackObject = handles.myPushButton;

    % Or more simply
    callbackObject = hObject;

    % Do stuff
end