MATLAB GUI和m文件控制组件

时间:2015-12-22 14:59:16

标签: matlab user-interface handle

我需要通过另一个m文件控制gui组件,例如,如果我有一些按钮,我想让他通过一些m文件(不是gui m文件,但在同一个工作区下)禁用。问题是m文件无法识别按钮(因为它是一个不同的文件),所以我无法使用此命令:

set(handle.pushbutton, 'Enable', 'off')

你有什么想法吗?我试图使用全局变量并且它没有工作......我已经尝试过了:

在gui m文件中:

global h;
h=handle.pushbutton.

和另一个m文件(不是gui m文件):

global h;
set(h,'Enable', 'off');

2 个答案:

答案 0 :(得分:2)

您可以使用findobj从m文件中“查找”与您的GUI相关联的数字,获取其子项并访问您要禁用的按钮,然后将其禁用。为了方便起见,请为每个元素添加标记,以便在需要时可以轻松找到它们。

作为一个例子,假设您在创建GUI时将名称“MyFigure”赋予GUI图形:

hfigure  = figure('Position',[100 100 200 100],'Units','normalized','name','MyFigure');

并将标签“MyButton”提供给按钮:

hButton1= uicontrol('Style','push','String','1','Position',[40 50 50 30],'Tag','MyButton');

现在在您的m文件中,您可以使用以下命令访问此图(请注意它需要打开):

F = findobj('Name','MyFigure');

由于GUI的所有元素实际上都是主要图形的子元素,因此您可以使用“Children”属性访问它们,再次使用findobj

PushHandles = findobj(F.Children,'style','pushbutton','Tag','MyPushbutton')

您现在可以将按钮的句柄存储在PushHandles中,您可以根据需要启用/禁用:

set(PushHandles,'Enable','off');

耶!

答案 1 :(得分:0)

这是我对Benoit的回答。

我在指南中创建了一个名为“TheGui'”的gui。它保存在文件TheGui.fig和TheGui.m中。 TheGui有一个带标签的按钮' TheGuiButton'。

在MATLAB命令行中,我使用命令TheGui启动gui并打开它。

在MATLAB命令窗口中使用此循环,我得到了一个处理' TheGui'。我无法使F = findobj(' Name',#39; TheGui')工作。

for hx = findall(0, 'type','figure'),if isequal('TheGui',get(hx,'name')),hGui=hx,end,end

使用TheGui的句柄,我得到了按钮(唯一的孩子)的句柄。

hButton = findobj(hGui,'style','pushbutton')

通过

检查其属性,我可以看到这就是我想要的
v = get(hButton)

我可以像这样更改按钮的属性

set(hButton,'enable','off')

我把它们放在一个MATLAB脚本文件中,看它是否正常工作

for hx = findall(0, 'type','figure')
  if isequal('TheGui',get(hx,'name'))
    hGui=hx
  end
end
hButton = findobj(hGui,'style','pushbutton')
for i = 1:10
  set(hButton,'enable','off')
  pause(1)
  set(hButton,'enable','on')
  pause(1)
end