我在MATLAB中有两个GUI。我在GUI1中的句柄结构中存储了一些值,因此当它在命令窗口中显示时,它看起来像这样:
GUI1: [1x1 Figure]
pushbutton2: [1x1 UIControl]
text2: [1x1 UIControl]
edit1: [1x1 UIControl]
output: [1x1 Figure]
val1: 0
我想使用val1
在GUI2中设置值counter
。我没有任何命令在GUI2中初始化counter
。如何在GUI2中访问GUI1的句柄?
我尝试使用命令guidata(findobj('Tag','GUI1'))来获取这些句柄,但它显示它是空的。
我尝试了以下操作:
在GUI1中,在OpeningFcn:
下handles.val1 = 0;
guidata(hObject, handles);
setappdata(handles.GUI1,'val1', handles.val1)
在GUI2中,在按钮功能中:
counter = getappdata(handles.GUI1,'val1')
但这似乎也不起作用!它给我一个错误,说“参考不存在的字段'GUI1'。”
我有GUI1的句柄可见性,标签设置为“GUI1”。为什么我还有这个问题?
答案 0 :(得分:2)
您应该在找到对象之前设置GUI的Tag,即GUI1的Tag = GUI1
。然后,您可以尝试查找根对象的所有子项:
gui1_H = get(0,'Children', 'Tag', 'GUI1');
或只使用findobj
:
gui1_H = findobj('Type', 'figure', 'Tag', 'GUI1');
在某些情况下,GUI的HandleVisibility
设置为off
,在这种情况下,您可以在GUI2中使用findall
:
gui1_H = findall(0, 'Type', 'figure', 'Tag', 'GUI1');
获取句柄结构:
data = guidata(gui1_H);
disp(data.val);
请注意,您当前正在同时打开2个GUI,因此如果您将两个GUI的默认标记保持为figure1
,那么gui1_H
将不会被视为图形对象的句柄,因此您也无法获得guidata
。