【问题标题】:Tag Names As Variables And Displaying It In Matlab GUI将名称标记为变量并在 Matlab GUI 中显示
【发布时间】:2016-10-30 18:24:05
【问题描述】:

我正在 Matlab 中构建一个 GUI(我的第一个),我有 160 个静态文本框,标签名称为“tag_matrix_1, tag_matrix_2, etc”。我正在尝试构建一个循环,将所有标签名称放在一个向量中:

for i = 1:160
tagNames(i) = ['tag_matrix_' num2str(i)];
end

但我总是会收到错误消息:“在赋值 A(I) = B 中,B 和 I 中的元素数量必须相同。” 为什么?我该如何解决?

我的第二个问题是关于循环显示它。是否可以循环播放,所以我没有 160 行设置我的静态文本框? 喜欢:

for i = 1:160
set(handles."how can I implement tagNames(i) in there",'String',data2d(i,:);
end

【问题讨论】:

  • 对于第一个问题:所有tagNames 的字符数都不相同(例如tag_matrix_1tag_matrix_160),因此您会收到有关尺寸的错误。您最好使用单元格数组来存储它们,即tagNames{i}。或者使用具有动态名称引用的结构。
  • 第二个问题没看懂;设置文本框中显示的名称的循环有什么问题?
  • 首先感谢。 tagNames{i} 效果很好。我不知道如何将变量放入我的行中: set(handles.tagName{i},'String',data2d(i,:));不起作用。

标签: matlab loops user-interface tags matlab-figure


【解决方案1】:

与其尝试将标签名称存储在数组中(这将失败,因为它们的大小都不同),我会创建一个结构,其中字段名称是标签名称,值是句柄本身。您可以为此使用动态字段引用。

for k = 1:160
    field = ['tag_matrix_', num2str(k)];
    myhandles.(field) = findobj(gcf, 'tag', field);
end

然后在您的第二个循环中(填写值),您将访问此结构的字段。

for k = 1:160
    set(myhandles.(['tag_matrix_', num2str(k)]), 'String', data2d(k,:));
end

你真的需要像这样存储tag_names吗?您实际上可以只使用findobj 来查找具有给定标签的元素。这将允许您将第二个循环替换为。

for k = 1:160
    set(findobj(gcf, 'tag', ['tag_matrix_', num2str(k)]), 'String', data2d(k,:))
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多