我需要通过另一个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');
答案 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