几个菜单栏还好,当功能超多选项超多,写起来就真的心累。增删改困难,还不利于管理。
所以给大家分享一个利用excel一篇批量生成菜单栏的方法。
by 今天不飞了
《拿来吧你》MATLAB GUI (一)快速生成菜单栏
所需函数uimenu(Fig,'Text',menuname)
,使用方法演示代码如下
function MenuTest()
Fig = figure('Name','test','Position',[600,400,600,600],...
'menu','none','Color','white','NumberTitle','off');
M0 = uimenu(Fig,'Text','文件');
M1 = uimenu(Fig,'Text','编辑');
M0_1 = uimenu(M0,'Text','显示红图');
M0_2 = uimenu(M0,'Text','显示蓝图');
M0_1.MenuSelectedFcn = @doit1;
M0_1.Checked = 'off';
M0_1.Separator = 'off';
M0_1.Accelerator = 'A';
M0_2.MenuSelectedFcn = @doit2;
M0_2.Checked = 'off';
M0_2.Separator = 'off';
M0_2.Accelerator = 'B';
Axes = axes(Fig,'Position',[0.1,0.1,0.8,0.8]);
function doit1(~,~)
M0_1.Checked = 'on';
M0_2.Checked = 'off';
im = cat(3,ones(100),zeros(100),zeros(100));
imshow(im,'Parent',Axes)
end
function doit2(~,~)
M0_1.Checked = 'off';
M0_2.Checked = 'on';
im = cat(3,zeros(100),zeros(100),ones(100));
imshow(im,'Parent',Axes)
end
end
首先建立一个如下格式的excel表,放在代码同路径下
核心代码CreateMenu(Fig)
,调用方式如下
function FastMenuTest()
% 主界面
H.Fig = figure('Name','test','Position',[900,500,600,400],...
'menu','none','Color','white','NumberTitle','off');
% 菜单栏
CreateMenu(H)
% 菜单栏生成函数
function CreateMenu(HMenu)
% 获取菜单列表
[~,~,menuList] = xlsread('menulist.xlsx'); % 请改成你的xls文件名
menuList = menuList(2:end,:);
menuNum = size(menuList,1);
% 重排序
[~,idx] = sort(cell2mat(menuList(:,1)));
menuList = menuList(idx,:);
% 开始创建
params = {'Text','MenuSelectedFcn','Checked','Separator','Accelerator'};
for mn = 1:menuNum
menuinfo = menuList(mn,:);
% 初始化
Hname = strcat('HMenu.',menuinfo{2});
if menuinfo{1}==0
str = strcat(Hname,'=uimenu(HMenu.Fig);');
else
str = strcat(Hname,'=uimenu(','HMenu.',menuList{menuinfo{1},2},');');
end
eval(str)
% 设置参数
for n = 1:5
if isnan(menuinfo{n+2})
continue
end
if n==2
str = strcat(Hname,'.',params{n},'=@',menuinfo{n+2},';');
else
str = strcat(Hname,'.',params{n},'=menuinfo{',num2str(n+2),'};');
end
eval(str)
end
end
end
end