Matlab 模拟用户单击以调用回调时,根属性CallbackObject是否未更新?
我有一个MATLAB m文件(mainGUI.m),它生成一个GUI:一个包含一些uicontrol对象(按钮、菜单等)的图形,每个对象都有一个特定的回调函数。当我在GUI中点击时,一切都很好,它做的正是它应该做的 现在,我有了另一个m文件(external.m),当执行时,它调用上面的m文件,并模仿其中一个回调(mycallbackpcn.m),就好像用户实际上在按按钮一样。下面是在external.m内执行的相关代码段: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
% 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')
,但通常这是一个容易出错的选项。如果这个答案对你有帮助,考虑把它标记为一个解决方案(即使承认它不是你想要听到的:)