2023年12月22日发(作者:)

Matlab GUI 常用操作

菜单

1. 编辑菜单

打开GUIDE,选择工具栏上面的菜单编辑按钮

2. 添加菜单回调函数(callback)

菜单编辑完成保存后,在fig对应的m文件中会自动生成菜单的回调函数声明

例如菜单tag名为menuFilePrint,则对应的callback函数为:

function menuFilePrint_Callback(hObject, eventdata, handles)

可以在该函数内添加代码实现功能。

3. 菜单项访问

• 获取菜单句柄

在matlab的函数中要对某个菜单进行访问,必须获得该菜单的句柄。

如果是在菜单的回调函数里面,hObject就是该菜单的句柄;

1

如果是在其他的函数里面要获得某一菜单的句柄,比如选中工具栏上的ZoomIn按钮,按钮处于被按下状态,同时要设置对应菜单项view->Zoom-Zoom In 为选中状态,如下图:

这里要在按钮“ZoomIn”的callback函数里面实现对菜单menuViewZoomIn的状态设置。首先得获得菜单的句柄:

% first we must get the handle of menuZoomIn

hFigChildren = allchild(gcf);

% menuView handle

hMenuView = findobj(hFigChildren,'Tag','menuView');

hvc = allchild(hMenuView);

% menuViewZoom

hViewZoom = findobj(hvc,'Tag','menuViewZoom');

hvzc = allchild(hViewZoom);

%menuZoomIn handle

hZoomIn = findobj(hvzc,'Tag', 'menuZoomIn');

• 获取设置菜单状态

得到菜单的句柄后就可以得到菜单当前的状态了:

if strcmp(get(hZoomIn, 'Checked'),'on')

set(hZoomIn, 'Checked', 'off');

else

set(hZoomIn, 'Checked', 'on');

end

2

工具栏

1. 不显示工具栏

1) GUIDE开发界面

在对应的m文件中找到

function Main_OpeningFcn(hObject, eventdata, handles, varargin)

在该函数里面添加:

set(hObject,'Toolbar','none');

2) M文件开发

hMainFigure = figure(... % The main GUI figure

'MenuBar','none', ...

'Toolbar','none', ...

'HandleVisibility','callback', ...

'Color', get(0,...

'defaultuicontrolbackgroundcolor'));

2. 显示“Figure”工具栏

set(hObject,'Toolbar','figure');

3. 添加自定义工具栏

set(hObject,'Toolbar','none');

hToolbar = uitoolbar(hObject);

hNewPushtool = uipushtool(... % Open toolbar button

'Parent',hToolbar,...

'TooltipString','New File',...

'CData',imread(''));

'HandleVisibility','callback', ...

'ClickedCallback', @hOpenMenuitemCallback);

4. 获取工具栏句柄

% get toolbar handle

hToolbar = findall(gcf,'Type','uitoolbar');

if isempty(hToolbar), return, end

5. 获取figure工具栏按钮的tag值

% get toolbar handle

hToolbar = findall(gcf,'Type','uitoolbar');

if isempty(hToolbar), return, end

3

% get all children

hChildren = allchild(hToolbar);

if isempty(hChildren), return,end

hTags = get(hChildren, ‘Tag’);

hTags保存了工具栏所有按钮的tag值:

6. 获取设置figure工具栏按钮的callback函数

%reset callback function for "Zoom in"

hZoomIn = findobj(hChildren,'Tag','');

set(hZoomIn,'ClickedCallback',@tbZoomIn_Callback);

function tbZoomIn_Callback(hObject, eventdata)

% hObject handle to tbZoomIn (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

7. 删除figure工具栏按钮

% set figure toolbar first

set(hObject,'Toolbar','figure');

% get toolbar handle

tbh = findall(hObject,'Type','uitoolbar');

if isempty(tbh), return, end

% toolbar buttons collection

hChildren = allchild(tbh);

if isempty(hChildren), return, end

% delete data cursor button

hDeleted = findobj(hChildren,'Tag','rsor');

delete(hDeleted);

4

8. 设置figure工具栏按钮的状态

% get toolbar handle

hToolbar = findall(gcf,'Type','uitoolbar');

if isempty(hToolbar), return, end

% get all children

hChildren = allchild(hToolbar);

if isempty(hChildren), return,end

hTags = get(hChildren, 'Tag');

% find "Zoom In" button

hb = findobj(hChildren,'Tag','');

if isempty(hb),return, end

% set state

if strcmp(get(hObject, 'Checked'),'on')

set(hObject, 'Checked', 'off');

set(hb,'State', 'off');

else

set(hObject, 'Checked', 'on');

set(hb,'State', 'on');

end

5