Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 模拟用户单击以调用回调时,根属性CallbackObject是否未更新?_Matlab_User Interface_Callback_Matlab Figure - Fatal编程技术网

Matlab 模拟用户单击以调用回调时,根属性CallbackObject是否未更新?

Matlab 模拟用户单击以调用回调时,根属性CallbackObject是否未更新?,matlab,user-interface,callback,matlab-figure,Matlab,User Interface,Callback,Matlab Figure,我有一个MATLAB m文件(mainGUI.m),它生成一个GUI:一个包含一些uicontrol对象(按钮、菜单等)的图形,每个对象都有一个特定的回调函数。当我在GUI中点击时,一切都很好,它做的正是它应该做的 现在,我有了另一个m文件(external.m),当执行时,它调用上面的m文件,并模仿其中一个回调(mycallbackpcn.m),就好像用户实际上在按按钮一样。下面是在external.m内执行的相关代码段: % Launch the GUI mainGUI(); % Obta

我有一个MATLAB m文件(mainGUI.m),它生成一个GUI:一个包含一些uicontrol对象(按钮、菜单等)的图形,每个对象都有一个特定的回调函数。当我在GUI中点击时,一切都很好,它做的正是它应该做的

现在,我有了另一个m文件(external.m),当执行时,它调用上面的m文件,并模仿其中一个回调(mycallbackpcn.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,[]);
这也可以很好地工作-在MyCallBackPCN中,hObject确实是正确的句柄,我可以访问整个GUI句柄结构,等等。。。但是有一个缺陷,这对我的代码的目的至关重要。根属性CallbackObject为空!然而,它应该是hObject的句柄,当我通过单击按钮手动启动回调时就是这个句柄


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

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

在回调中,您可以直接从
句柄
结构获取对象,而不是依赖
CallbackObject
(或
gcbo

myCallbackfcn(hObject, [], handles)

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

    % Or more simply
    callbackObject = hObject;

    % Do stuff
end

谢谢@Suever!我希望更新CallbackObject属性的原因是因为我已经有数千行代码和数百个回调函数,它们依赖于gcbo不是空的。只要我手动运行GUI,它就可以工作,但是现在我想远程运行它,我也遇到了问题。。因此,如果没有简单的方法欺骗MATLAB(改变CallbackObject属性),我将不得不回顾我以前的所有代码。。不过,正如您所指出的,更改非常小。@ibbore是的,很遗憾,无法设置
gcbo
CallbackObject
。您可以编写自己的名为
gcbo
的函数,该函数可以返回您选择的对象,然后所有其他函数将自动调用该函数,而不是内置版本。这是一个好主意。。虽然有点冒险(万一以后需要真正的gcbo),但这个项目越来越大,总有一天我会把它交给别人,所以出于这个原因,我想我最好检查一下我的功能并替换gcbo:s。。。非常感谢你的评论,我真的很感激@是的。您可以始终使用
builtin('gcbo')
,但通常这是一个容易出错的选项。如果这个答案对你有帮助,考虑把它标记为一个解决方案(即使承认它不是你想要听到的:)