MATLAB GUI 中的多个回调
Multiple callbacks in a MATLAB GUI
我正在尝试将字符向量回调转换为函数句柄。但是,我正在调用多个回调,我认为我可以创建一个带有匿名函数的元胞数组?
代码如下:
guiel.hPB(2)=uicontrol(guiel.cPanel(2),'Style','PushButton','Units','pixels',...
'TooltipString',guiel.plotTt,...
'Position',[cnst.bhspace 3*cnst.bvspace+2*cnst.bheight cnst.bwidth cnst.bheight],...
'String','Run Simulation','fontsize',10,'FontWeight','Demi',...
'CallBack','eval(codeblk.CLOSE_MDL_FCN); set(guiel.cPanel(4),''Visible'',''off'');set(guiel.APPWINDOW,''Resize'',''off''); primePlot;',...
'Enable','off');
我想做的是将codeblk.CLOSE_MDL_FCN
写入函数句柄,其余的是匿名函数句柄?但是,我不确定该怎么做。
codeblk.CLOSE_MDL_FCN = ['if ~isempty(find_system(''Name'',vars.simfilename))'...
'vars.simtime = str2num(get_param(vars.simfilename,''StopTime''));'...
'set(guiel.hSimtime,''String'',num2str(vars.simtime));'...
'save_system(vars.simfilename);'...
'close_system(vars.simfilename);'...
'end'];
creating a callback using a function handle is that it is a single function to handle everything for when that GUI object is interacted with. Using a cell array callback 的想法是当您需要向函数传递额外数据时,而不是为了调用多个函数。以下是我建议您设计按钮回调的方式:
guiel.hPB(2) = uicontrol(..., 'CallBack', @callback_hPB2, ...);
然后你会定义两个 nested functions:
function callback_hPB2(~, ~)
close_fcn();
set(guiel.cPanel(4), 'Visible', 'off');
set(guiel.APPWINDOW, 'Resize', 'off');
primePlot();
end
function close_fcn
if ~isempty(find_system('Name', vars.simfilename))
vars.simtime = str2num(get_param(vars.simfilename, 'StopTime'));
set(guiel.hSimtime, 'String', num2str(vars.simtime));
save_system(vars.simfilename);
close_system(vars.simfilename);
end
end
我正在尝试将字符向量回调转换为函数句柄。但是,我正在调用多个回调,我认为我可以创建一个带有匿名函数的元胞数组?
代码如下:
guiel.hPB(2)=uicontrol(guiel.cPanel(2),'Style','PushButton','Units','pixels',...
'TooltipString',guiel.plotTt,...
'Position',[cnst.bhspace 3*cnst.bvspace+2*cnst.bheight cnst.bwidth cnst.bheight],...
'String','Run Simulation','fontsize',10,'FontWeight','Demi',...
'CallBack','eval(codeblk.CLOSE_MDL_FCN); set(guiel.cPanel(4),''Visible'',''off'');set(guiel.APPWINDOW,''Resize'',''off''); primePlot;',...
'Enable','off');
我想做的是将codeblk.CLOSE_MDL_FCN
写入函数句柄,其余的是匿名函数句柄?但是,我不确定该怎么做。
codeblk.CLOSE_MDL_FCN = ['if ~isempty(find_system(''Name'',vars.simfilename))'...
'vars.simtime = str2num(get_param(vars.simfilename,''StopTime''));'...
'set(guiel.hSimtime,''String'',num2str(vars.simtime));'...
'save_system(vars.simfilename);'...
'close_system(vars.simfilename);'...
'end'];
creating a callback using a function handle is that it is a single function to handle everything for when that GUI object is interacted with. Using a cell array callback 的想法是当您需要向函数传递额外数据时,而不是为了调用多个函数。以下是我建议您设计按钮回调的方式:
guiel.hPB(2) = uicontrol(..., 'CallBack', @callback_hPB2, ...);
然后你会定义两个 nested functions:
function callback_hPB2(~, ~)
close_fcn();
set(guiel.cPanel(4), 'Visible', 'off');
set(guiel.APPWINDOW, 'Resize', 'off');
primePlot();
end
function close_fcn
if ~isempty(find_system('Name', vars.simfilename))
vars.simtime = str2num(get_param(vars.simfilename, 'StopTime'));
set(guiel.hSimtime, 'String', num2str(vars.simtime));
save_system(vars.simfilename);
close_system(vars.simfilename);
end
end