我有一个使用GUI Layout Toolbox创建的MATLAB GUI。此GUI有一个主要图形。主要图形有一个按钮,可调用次要图形。有一个通过主要图形调用的函数,该函数从次要图形访问一些变量。在代码的开头或直到打开辅助图形的位置,一切正常。一旦辅助控件打开,如果我保持打开状态,该函数调用将正常工作,但是如果我关闭辅助图形,该函数调用将停止工作。
以下是我如何定义变量和函数调用的摘要:
S.Fig1 = figure();
S.var1 = uicontrol('parent',S.Fig1,...
'style','edit');
S.Fig2 = figure();
S.var2 = uicontrol('parent',S.Fig2,...
'style','edit');
S.var1与函数调用var1_call()相关联,在该函数内部,我正在检查S.var2的值。如果辅助图形是打开的,则正确提供了值,否则该语句将显示一条错误消息,提示“无效的句柄对象”
请让我知道是否无法同时定义两个图形,如果可以的话,如何在打开一次fig2之后检查是否将其关闭。
谢谢
添加以下示例代码:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%测试脚本以检查是否从主图中调用了新图%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%
function [] = TestCallingNewWindow()
SCR = get(0,'Screensize'); % Get screensize.
% Open Figure
S.fh = figure('numbertitle','off',...
'menubar','none',...
'units','pixels',...
'position',[SCR(3)/2-800 ,SCR(4)/2-100 , 500, 200],...
'name','TestCallingWindow',...
'resize','off');
% Create PushButtons
S.pb1 = uicontrol('style','pushbutton',...
'units','pixels',...
'position',[20 120 200 30],...
'string','Open New Window',...
'fontsize',12);
for i=1:6
S.Select(i) = uicontrol('parent',S.fh,...
'style','checkbox',...
'units','pixels',...
'position',[250 (165-((i-1)*30)) 30 20],...
'string',sprintf('%d',i),...
'enable','on',...
'fontsize',10);
S.Type(i) = uicontrol('parent',S.fh,...
'style','text',...
'units','pixels',...
'position',[300 (165-((i-1)*30)) 60 20],...
'string','Data',...
'enable','on',...
'fontsize',10);
S.TypeVal(i) = uicontrol('parent',S.fh,...
'style','edit',...
'units','pixels',...
'position',[365 (165-((i-1)*30)) 80 20],...
'string','0',...
'enable','on',...
'fontsize',10);
end
% Create the Pop-up Figure
S.popfh = figure('numbertitle','off',...
'menubar','none',...
'units','pixels',...
'position',[SCR(3)/2-200 ,SCR(4)/2-100 , 300, 200],...
'name','Pop-Up Window',...
'resize','off',...
'visible','off');
for i=1:6
S.popSelect(i) = uicontrol('parent',S.popfh,...
'style','checkbox',...
'units','pixels',...
'position',[50 (165-((i-1)*30)) 30 20],...
'string',sprintf('%d',i),...
'enable','on',...
'fontsize',10);
S.popType(i) = uicontrol('parent',S.popfh,...
'style','text',...
'units','pixels',...
'position',[100 (165-((i-1)*30)) 60 20],...
'string','Data',...
'enable','on',...
'fontsize',10);
S.popTypeVal(i) = uicontrol('parent',S.popfh,...
'style','edit',...
'units','pixels',...
'position',[165 (165-((i-1)*30)) 80 20],...
'string','0',...
'enable','on',...
'fontsize',10);
end
% Set callback functions
set(S.Select(:),'callback',{@main_call,S})
set(S.TypeVal(:),'callback',{@main_call,S})
set(S.pb1,'callback',{@pb1_call,S})
set(S.popSelect(:),'callback',{@pb1_call,S})
set(S.popTypeVal(:),'callback',{@pb1_call,S})
% Function Definitions
function [] = main_call(varargin)
[h,S] = varargin{[1,3]}; % Get calling handle and structure.
popWin = findobj('type','figure','name','Pop-Up Window');
for idx = 1:6
if(~isempty(popWin))
popenable = get(S.popSelect(idx),'Value');
else
popenable = 0;
end
if(popenable == 0)
enable = get(S.Select(idx),'Value');
if(enable == 1)
data = str2double(get(S.TypeVal(idx),'String'));
if(~isempty(popWin))
set(S.popTypeVal(idx),'string',data);
end
end
else
data = str2double(get(S.popTypeVal(idx),'String'));
end
end
end
% po-up window
function [] = pb1_call(varargin)
[h,S] = varargin{[1,3]}; % Get calling handle and structure.
set(S.popfh,{'visible'},{'on'});
for idx = 1:6
popenable = get(S.popSelect(idx),'Value');
if(popenable == 0)
enable = get(S.Select(idx),'Value');
if(enable == 1)
data = str2double(get(S.TypeVal(idx),'String'));
set(S.popTypeVal(idx),'string',data);
end
else % if popenable is 1
data = str2double(get(S.popTypeVal(idx),'String'));
end
end
end
end
如何命名您的人物:
S.Fig1 = figure('name','figure1');
S.Fig2 = figure('name','figure2');
然后,您可以通过以下方式找到它们findobj
:
findobj('type','figure','name','figure2');
如果打开,将返回图形手柄;如果关闭,则返回空白。因此,此调用将检查该图是否存在:
~isempty(findobj('type','figure','name','figure2'))
资料来源:
http://www.mathworks.com/help/matlab/ref/findobj.html
http://www.mathworks.com/help/matlab/ref/isempty.html
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%获得该线路上的错误:set(S.popfh,{'visible'},{'on'});
在pb1_call
如果该图中被关闭,如上所述。因此,除此以外,您应该具有:
if ~isempty(findobj('type','figure','name','Pop-Up Window'))
set(S.popfh,{'visible'},{'on'});
else
S.popfh=figure('name','Pop-Up Window','Visible','on');
end
这更加健壮,可以在尝试更改图形属性之前确保图形已打开。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句