第七讲 matlab 图形用户界面设计

35
7.1 MATLAB 图图图图图图图图 7.2 MATLAB 图图图图图 7.3 MATLAB 图图图图图图图图图图 7.4 MATLAB 图图图图图 图图 7.5 图图图图图图图图 GUIDE 图图 7.6 图图图图图图图图图 图图图 图图图 MATLAB MATLAB 图图图图图图图图 图图图图图图图图

Upload: abra

Post on 21-Mar-2016

206 views

Category:

Documents


5 download

DESCRIPTION

第七讲 MATLAB 图形用户界面设计. 7.1 MATLAB 图形界面编程基础 7.2 MATLAB 标准对话框 7.3 MATLAB 图形界面设计基本控件 7.4 MATLAB 界面菜单系统设计 7.5 可视界面开发工具 GUIDE 介绍 7.6 程序设计举例与习题. 7.1 MATLAB 图形界面编程基础. MATLAB 语言提供了面向对象的图形界面设计方法。对象之间的关系如下图所示。. 7.1 MATLAB 图形界面编程基础. 窗口对象 figure. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第七讲  MATLAB 图形用户界面设计

7.1 MATLAB 图形界面编程基础7.2 MATLAB 标准对话框7.3 MATLAB 图形界面设计基本控件7.4 MATLAB 界面菜单系统设计7.5 可视界面开发工具 GUIDE 介绍7.6 程序设计举例与习题

第七讲 第七讲 MATLABMATLAB 图形用户界面设图形用户界面设计计

Page 2: 第七讲  MATLAB 图形用户界面设计

MATLAB 语言提供了面向对象的图形界面设计方法。对象之间的关系如下图所示。

7.1 MATLAB 7.1 MATLAB 图形界面编程基图形界面编程基础础

line text surface im age light patch rectangle

axes uicontrol uim enu uicontextm enu

figure

root

Page 3: 第七讲  MATLAB 图形用户界面设计

窗口对象 figure

7.1 MATLAB 7.1 MATLAB 图形界面编程基图形界面编程基础础每一个窗口对象 figure 下可以有 4 种对象,即菜单 uimenu 对象、控件 uicontrol 对象、坐标轴 axes 对象和右键快捷菜单 uicontextmenu 对象。

• h=figure; 返回窗口句柄 h• figure(h); 将窗口 h 设为当前窗口• gcf; 返回当前窗口句柄 h• get(h); 查看当前窗口的属性及其取值• set(h); 查看窗口的所有属性及可能取值

Page 4: 第七讲  MATLAB 图形用户界面设计

窗口对象 figure

7.1 MATLAB 7.1 MATLAB 图形界面编程基图形界面编程基础础窗口属性可以由下面命令设置或修改 set(h,‘PropertyName1’,PropertyVal1,‘PropertyName2’,PropertyVal

2,...) ,也可以用图形界面的形式设置首先用下述命令画出一波形t=0:0.1:2*pi;y=sin(t);plot(t,y)再选择图形窗口下 Edit / Figure Property… 菜单将弹出窗口属性对话框,并可以看到对象的层次关系以及可以编辑所选择的任何对象的属性。注意不是所有属性都可以在图形界面上设置,但都可以用 set 命令来进行设置。

Page 5: 第七讲  MATLAB 图形用户界面设计

窗口对象 figure 的各种回调函数

7.1 MATLAB 7.1 MATLAB 图形界面编程基图形界面编程基础础

CloseRequestFcn 关闭窗口时的响应函数CreateFcn 窗口建立时的响应函数DeleteFcn 窗口对象删除时的响应函数KeyPressFcn 键盘键按下时的响应函数WindowButtonDownFcn 鼠标按键按下时的响应函数WindowButtonMotionFcn 鼠标按键移动时的响应函数WindowButtonUpFcn 鼠标按键释放时的响应函数

回调函数 callback 是指该对象指定的事件发生时调用的函数,窗口对象的回调函数主要有以下一些。

Page 6: 第七讲  MATLAB 图形用户界面设计

7.1 MATLAB 7.1 MATLAB 图形界面编程基图形界面编程基础础• 根对象属性详细的资料见 Root Property 帮助文档• 窗口对象属性详细的资料见 figure 函数的帮助文档• 坐标轴对象属性详细的资料见 axes 函数的帮助文档• 菜单对象属性详细的资料见 uimen 函数的帮助文档• 控件对象属性详细的资料见 uicontrol 函数的帮助文档• 右键菜单对象见 uicontextmenu 函数的帮助文档• 线对象属性详细的资料见 line 函数的帮助文档• 文字对象属性详细的资料见 text 函数的帮助文档• 表面图对象属性详细的资料见 surface 函数的帮助文档• 图像对象属性详细的资料见 image 函数的帮助文档• 光源对象属性详细的资料见 light 函数的帮助文档• 三维块对象属性详细的资料见 patch 函数的帮助文档• 矩形对象属性详细的资料见 rectangle 函数的帮助文档

Page 7: 第七讲  MATLAB 图形用户界面设计

7.2 MATLAB 7.2 MATLAB 标准对话框标准对话框• 文件对话框 [fname, pname]=uigetfile(ffilter, strTitle, x, y)

>> [fname, pname]=uigetfile('*.m;*.txt;*.c', 'Please select a file name')

fname =diff.m

pname =F:\MATLAB6p1\work\@polynom\

Page 8: 第七讲  MATLAB 图形用户界面设计

7.2 MATLAB 7.2 MATLAB 标准对话框标准对话框• 文件写对话框 [fname, pname]=uiputfile(ffilter, strTitle, x,

y)[filename, pathname] = uiputfile('*.m;*.mdl;*.mat', 'Save As')

Page 9: 第七讲  MATLAB 图形用户界面设计

7.2 MATLAB 7.2 MATLAB 标准对话框标准对话框• 颜色设置对话框 c=uisetcolor; 或 c=uisetcolor(c0);

>> uisetcolor

ans = 0.5020 1.0000 0

Page 10: 第七讲  MATLAB 图形用户界面设计

7.2 MATLAB 7.2 MATLAB 标准对话框标准对话框• 字体设置对话框 h=uisetfont(h_Text, strTitle) 其中 h_Text 为要改变的字符句柄, strTitle 为对话框标题

>> uisetfont

ans =

FontName: 'Arial'

FontUnits: 'points'

FontSize: 10

FontWeight: 'normal'

FontAngle: 'normal'

Page 11: 第七讲  MATLAB 图形用户界面设计

7.2 MATLAB 7.2 MATLAB 标准对话框标准对话框• 警告、错误与提示信息对话框 warndlg(), errordlg(), helpdlg

()>> h=warndlg({'ERROR: There is...encountered', 'Try again'}, 'Warning')

h = 331.0017

>> h=errordlg({'ERROR: There is...encountered', 'Program Aborted'}, 'Error')

h = 331.0020

>> h=helpdlg({'HELP: Refer to the manual', 'Have a nice day'}, 'Message Box Dialog')

h = 331.0022

Page 12: 第七讲  MATLAB 图形用户界面设计

MATLAB 语言的控件可以由 uicontrol 函数设置,该函数的调用格式为

7.3 MATLAB 7.3 MATLAB 图形界面设计基本控图形界面设计基本控件件

h = uicontrol( PropertyName1, PropertyValue1, PropertyName2, PropertyValue2, …)

控件的属性及其取值见 uicontrol 函数的帮助文档,各种不同的控件由属性 Style 的值来控制,该属性取值有:

pushbutton, togglebutton, radiobutton, checkbox, edit, text, slider,frame, listbox, popupmenu

Page 13: 第七讲  MATLAB 图形用户界面设计

控件的其他重要的属性见下表

7.3 MATLAB 7.3 MATLAB 图形界面设计基本控图形界面设计基本控件件属性名 含义 取值情况CData 真彩色位图,该位图标注在控件上 一个矩阵String 控件标签,或 listbox 或 popupmenu 的项 字符串Enable 使能控制 on, off, inactiveStyle 风格,含义如前所示 见前页Value listbox 或 popupmenu 取值情况Callback 响应控件的回调函数 字符串,表示 MATL

AB 函数或命令

Page 14: 第七讲  MATLAB 图形用户界面设计

控件使用例子

7.3 MATLAB 7.3 MATLAB 图形界面设计基本控图形界面设计基本控件件h = uicontrol('Style', 'pushbutton', 'String', 'Clear',...

'Position', [20 150 100 70], 'Callback', 'cla');

该例子创建一按纽,按下时清除当前坐标轴

hpop = uicontrol('Style', ‘listbox',...

'String', 'hsv|hot|cool|gray',...

'Position', [20 320 100 50],...

'Callback', 'setmap');

val = get(hpop,'Value');if val == 1 colormap(hsv)elseif val == 2 colormap(hot)elseif val == 3 colormap(cool)elseif val == 4 colormap(gray)end

下例创建弹出菜单,根据选择不同项目执行不同操作,回调函数 setmap.m 见右所示。

Page 15: 第七讲  MATLAB 图形用户界面设计

MATLAB 允许用户设计出自己所需要的菜单系统,菜单的设置是由 uimen 函数来完成的,其调用格式为

7.4 MALTAB 7.4 MALTAB 界面菜单系统设计界面菜单系统设计

h =uimenu( Figurehandle, 'PropertyName1', value1, 'PropertyName2', value2,...)

如果用户想在某一个菜单条下定义一个新的子菜单条,则可以使用下面给出的命令格式

h =uimenu( parent_menu_handle, 'PropertyName1', value1, 'PropertyName2', value2,...)

Page 16: 第七讲  MATLAB 图形用户界面设计

菜单对象的属性也有许多,最重要的有以下两个7.4 MALTAB 7.4 MALTAB 界面菜单系统设计界面菜单系统设计

• 菜单条的提示名称 Label :它可以是一个任意字符串。在菜单项提示的字符串中允许用户使用 & 标志,以表示该符号后面的字符在显示时有一个下划线修饰,这使得用户可以用键盘键容易地激活相应的菜单项。

• 回调函数 Callback :它可以为一个函数名称,也可以是一组 MATLAB 命令。在该菜单被选中以后, MATLAB 将自动地调用此回调函数来作出对相应菜单项的响应,如果没有设置一个合适的回调函数,则此菜单项也将失去其应有的意义。

Page 17: 第七讲  MATLAB 图形用户界面设计

菜单例子7.4 MALTAB 7.4 MALTAB 界面菜单系统设计界面菜单系统设计

hf=figure('Name', 'Menu Test Window', 'NumberTitle', 'off', 'MenuBar', 'none');

hmfile=uimenu(hf, 'label', '&File');hmhelp=uimenu(hf, 'label', '&Help');uimenu(hmfile, 'label', '&New', 'callback', 'disp(''New Item Selected'')');uimenu(hmfile, 'label', '&Open', 'callback', 'disp(''Open Item Selecte

d'')');hmsav=uimenu(hmfile, 'label', '&Demo', 'Enable', 'off');uimenu(hmsav, 'label', 'Filter Demo', 'callback', 'filtdem2;');uimenu(hmsav, 'label', 'Filtering Demo', 'callback', 'filtdem;');uimenu(hmfile, 'label', 'Save &As', 'callback', 'key=4; filesys;');uimenu(hmfile, 'label', '&Exit','separator','on', 'callback', 'close(hf)');uimenu(hmhelp, 'label', 'About...', 'callback', ['disp(''myhelp''); set(hms

av, ''Enable'',''on'')']);

Page 18: 第七讲  MATLAB 图形用户界面设计

右键菜单用命令 uicontextmenu 创建,见下面例子7.4 MALTAB 7.4 MALTAB 界面菜单系统设计界面菜单系统设计

% 创建右键快捷菜单cmenu = uicontextmenu;% 画出图形曲线并与右键菜单发生联系hline = plot(1:10, 'UIContextMenu', cmenu);% 定义右键菜单项的 Callback 函数cb1 = ['set(hline, ''LineStyle'', ''--'')'];cb2 = ['set(hline, ''LineStyle'', '':'')'];cb3 = ['set(hline, ''LineStyle'', ''-'')'];% 定义右键菜单项item1 = uimenu(cmenu, 'Label', 'dashed', 'Callback', cb1);item2 = uimenu(cmenu, 'Label', 'dotted', 'Callback', cb2);item3 = uimenu(cmenu, 'Label', 'solid', 'Callback', cb3);

Page 19: 第七讲  MATLAB 图形用户界面设计

MATLAB 提供了一个可视的图形界面开发程序 GUIDE 。它的含义是 GUI Design Environment 。在 MATLAB 命令窗中键入命令 guide 将得到如图所示界面。

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍

Page 20: 第七讲  MATLAB 图形用户界面设计

开发含 GUI 界面的程序包含两个步骤

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍1. 设计 GUI 界面及其各个控件布局2. 为各个 GUI 界面控件编程 Callback 函数

从原理上来说,任何含 GUI 界面的程序都可以用 M 文件编辑器 Editor 来实现,但显然用 GUIDE 工具设计界面要方便得多。 GUIDE 设计将得到两个文件,他们是

1. FIG 文件:包含界面布局设计及各个图形对象属性取值2. M 文件:调出界面的主程序及各个回调子程序,一般称

为 M 应用文件。

Page 21: 第七讲  MATLAB 图形用户界面设计

应用 GUIDE 进行设计时,先要设置好 GUIDE 应用选项,选择菜单 Tools / Application Options ,将弹出如下对话框。

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍

各个选项含义很容易明白,在此不再多说。

Page 22: 第七讲  MATLAB 图形用户界面设计

一般来说,在 MATLAB 命令窗执行的绘图函数将在当前图形窗口绘图,但一般 GUI 窗口不希望这样操作,这可由选项Command-Line Accessibility 来控制,它的含义如下。

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍

Callback GUI 窗口和坐标轴只能被 Callback函数使用,这是缺省值Off MATLAB 命令行命令不能控制 GU

I 界面On MATLAB 命令行命令可以控制 GU

I 界面User-specified 根据窗口的 HandleVisibility 和

IntegerHandle 属性值由用户决定

Page 23: 第七讲  MATLAB 图形用户界面设计

当你选择 Generate callback function prototypes 时, GUIDE为每个有 Callback 函数的控件产生 Callback 原型函数。 Callback 原型函数语法及参数如下

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍

function varargout = objectTag_Callback(h,eventdata,handles,varargin)

h Callback 函数附属的对象的句柄eventdata 保留handles 对象句柄varagin 传递给 Callback 函数的参数列表

Page 24: 第七讲  MATLAB 图形用户界面设计

GUI 图形界面对象的属性可以用 Property Inspector 来查看与修改。

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍

Page 25: 第七讲  MATLAB 图形用户界面设计

可以用 Object Browser 查看图形对象的层次图

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍

Page 26: 第七讲  MATLAB 图形用户界面设计

下面介绍各个图形对象的 Callback 编程

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍Toggle Button 的 Callback 编程

function varargout = togglebutton1_Callback(h,eventdata,handles,varargin)

button_state = get(h,'Value');

if button_state == get(h,'Max') % toggle button is pressed

elseif button_state == get(h,'Min') % toggle button is not pressed

end

为按纽加图像a(:,:,1) = rand(16,128);

a(:,:,2) = rand(16,128);

a(:,:,3) = rand(16,128);

set(h,'CData',a)

Page 27: 第七讲  MATLAB 图形用户界面设计

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍Radio Button 的编程

Radio Button 选还是没有被选由 Value 属性值来确定Value = Max, 被选 .

Value = Min, 没有被选为了使得一组 Radio Button 中只有一个被选,要求用户编程设置其他的 Radio Button 的 Value 值为零,被选中的那个 Radio Button 系统设为 1 。function varargout = radiobutton1_Callback(h,eventdata,handles,varargin)

off = [handles.radiobutton2,handles.radiobutton3,handles.radiobutton4]; set(off,'Value',0)

Page 28: 第七讲  MATLAB 图形用户界面设计

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍Check Box 的编程

Radio Button 选还是没有被选由 Value 属性值来确定Value = Max, 被选 .

Value = Min, 没有被选Check Box 的 Callback 编程如下。

function checkbox1_Callback(h,eventdata,handles,varargin)

if (get(h,'Value') == get(h,'Max'))

% then checkbox is checked-take approriate action

else

% checkbox is not checked-take approriate action

end

Page 29: 第七讲  MATLAB 图形用户界面设计

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍Edit Text 的编程

从 Edit Text 中取数值

function edittext1_Callback(h,eventdata,handles,varargin)

user_string = get(h,'string');

% proceed with callback...

function edittext1_Callback(h,eventdata,handles,varargin)

user_entry = str2double(get(h,'string'));

if isnan(user_entry)

errordlg('You must enter a numeric value','Bad Input','modal')

end

% proceed with callback...

Page 30: 第七讲  MATLAB 图形用户界面设计

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍List Box 的编程,从 List Box 中获得所选的项目(本例有 2 个项目被选中)

function [var1,var2] = get_var_names(handles)% Returns the names of the two variables to plotlist_entries = get(handles.listbox1,'String');index_selected = get(handles.listbox1,'Value');if length(index_selected) ~= 2

errordlg('You must select two variables','Incorrect Selection','modal')else

var1 = list_entries{index_selected(1)};var2 = list_entries{index_selected(2)};

end

Page 31: 第七讲  MATLAB 图形用户界面设计

7.5 7.5 可视界面开发工具 可视界面开发工具 GUIDE GUIDE 介介绍绍Popup Menu 的编程

function varargout = popupmenu1_Callback(h,eventdata,handles,varargin)val = get(h,'Value');switch valcase 1 % The user selected the first itemcase 2 % The user selected the second item% etc.

function varargout = popupmenu1_Callback(h,eventdata,handles,varargin)

val = get(h,'Value');

string_list = get(h,'String');

selected_string = string_list{val}; % convert from cell array to string

% etc.

Page 32: 第七讲  MATLAB 图形用户界面设计

例子:设计如下图所示界面

7.6 7.6 程序设计举例与习程序设计举例与习题题

Page 33: 第七讲  MATLAB 图形用户界面设计

第一步:设计界面布局7.6 7.6 程序设计举例与习程序设计举例与习题题

Page 34: 第七讲  MATLAB 图形用户界面设计

第二步:设置各个对象的属性

7.6 7.6 程序设计举例与习程序设计举例与习题题• 三个 Edit Box 的 String 属性分别设为 50 , 120 , 0:

0.001:0.25 ,作为 f1, f2, t 的初始值• 三个 Edit Box 的 Tag 属性分别设为 f1_input , f2_input

和 f1_input 。两个坐标轴的 Tag 属性分别设为 frequency_axes 和 time_axes ,将来 Callback 函数方便引用,如:handles.frequency_axes 和 handles.time_axes

• 选择菜单 Tools / Application Options 设置:Resize behavior: 为 ProportionalCommand-line accessibility: 为 Callback

Page 35: 第七讲  MATLAB 图形用户界面设计

第三步: Plot 按纽的 Callback 函数编程7.6 7.6 程序设计举例与习程序设计举例与习题题

function varargout = plot_button_Callback(h, eventdata, handles, varargin)% Get user input from GUIf1 = str2double(get(handles.f1_input,'String'));f2 = str2double(get(handles.f2_input,'String'));t = eval(get(handles.t_input,'String'));% Calculate datax = sin(2*pi*f1*t) + sin(2*pi*f2*t); y = fft(x,512); m = y.*conj(y)/512;f = 1000*(0:256)/512;;% Create frequency plotaxes(handles.frequency_axes) % Select the proper axesplot(f,m(1:257)); set(handles.frequency_axes,'XMinorTick','on'); grid on% Create time plotaxes(handles.time_axes) % Select the proper axesplot(t,x); set(handles.time_axes,'XMinorTick','on'); grid on