【问题标题】:How to access handles of another MATLAB GUI如何访问另一个 MATLAB GUI 的句柄
【发布时间】:2015-06-01 23:00:37
【问题描述】:

我在 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”。为什么我还有这个问题?

【问题讨论】:

  • 也许可以试试counter=findobj('type','double'),或者counter=findobj('type','double','parent',GUI1)
  • 它说:0x0 空的 GraphicsPlaceholder 数组。
  • 或者setappdatagetappdata
  • @Benoit_11 我刚刚将其添加到我原来的问题中。

标签: matlab user-interface


【解决方案1】:

您应该在找到对象之前设置 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.

【讨论】:

  • 我还没有尝试过,因为我设法将所有内容压缩到一个 GUI 中,但我会试一试以备将来使用,并告诉你!
  • 请注意,设置标签非常重要,它可以帮助您以后找到任何东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多