用户界面-如何访问另一个MATLAB GUI的句柄



我在MATLAB中有两个gui。我在GUI1的句柄结构中存储了一些值,因此当它显示在命令窗口中时,它看起来像这样:

        GUI1: [1x1 Figure]
        pushbutton2: [1x1 UIControl]
              text2: [1x1 UIControl]
              edit1: [1x1 UIControl]
             output: [1x1 Figure]
              val1: 0

我想在GUI2中使用val1来设置一个值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"。为什么我仍然有这个问题?

你应该在找到对象之前设置GUI的Tag,即GUI1的Tag = GUI1。然后,您可以尝试查找根对象的所有子对象:

gui1_H = get(0,'Children', 'Tag', 'GUI1');

或者直接使用findobj:

gui1_H = findobj('Type', 'figure', 'Tag', 'GUI1');

在某些情况下,GUI的HandleVisibility被设置为off,在这种情况下,您可以在GUI中使用findall:

gui1_H = findall(0, 'Type', 'figure', 'Tag', 'GUI1');

并获取句柄结构:

data = guidata(gui1_H);
disp(data.val);

请注意,你目前正在打开2个gui在同一时间,所以如果你保持两个gui的默认标签为figure1,那么gui1_H将不会被计算为图形对象的句柄,因此你也不能得到它的guidata

相关内容

  • 没有找到相关文章

最新更新