您的当前位置:首页正文

4、GUI编程实例

来源:九壹网
GUI编程实例

1、以fig方式编写绘制sinx、cosx图像关键程序和操作

首先在gui设计器上放置2个pushbutton、1个popupmenu、2个static text、1个坐标系 function popupmenu_func_Callback(hObject, eventdata, handles) val=get(hObject,'value'); switch val case 1

handles.data='sin(x)';

set(handles.text1,'string','sin(x)'); case 2

handles.data='cos(x)';

set(handles.text1,'string','cos(x)'); otherwise

handles.data='sin(x)';

set(handles.text1,'string','sin(x)'); end

guidata(hObject,handles)%最关键

function pushbutton_red_Callback(hObject, eventdata, handles) x=0:0.1:2*pi;

if handles.data=='sin(x)' y=sin(x);

plot(x,y,'r'); end

if handles.data=='cos(x)' y=cos(x);

plot(x,y,'r'); end

function pushbutton_blue_Callback(hObject, eventdata, handles) x=0:0.1:2*pi;

if handles.data=='sin(x)' y=sin(x);

plot(x,y,'b'); end

if handles.data=='cos(x)' y=cos(x);

plot(x,y,'b'); end

2、动态增加button

figure('MenuBar','none','Name','Gui01','NumberTitle','off','Position',[200,200,100,140]);

uicontrol('Style','PushButton','String','Push','Position',[20,100,60,20],...

'CallBack','disp(''You are pressed a push button'')');

uicontrol('Style','ToggleButton','String','Toggle','Position',[20,60,60,20],...

'CallBack','disp(''You are pressed a toggle button'')');

uicontrol('Style','PushButton','String','Close','Position',[20,20,60,20],...

'CallBack','close'); 3、函数形式增加button

function gui02

figure('MenuBar','none','Name','Gui02','NumberTitle','off','Position',[200,200,100,140]);

uicontrol('Style','PushButton','String','Push','Position',[20,100,60,20],...

'CallBack',@PushButtonPressed);

uicontrol('Style','ToggleButton','String','Toggle','Position',[20,60,60,20],...

'CallBack',@ToggleButtonPressed);

uicontrol('Style','PushButton','String','Close','Position',[20,20,60,20],...

'CallBack','close');

function PushButtonPressed(h, eventdata) disp('You are pressed a push button'); function ToggleButtonPressed(h, eventdata) disp('You are pressed a toggle button'); 4、按钮与静态文本交互操作

function gui03

figure('MenuBar','none','Name','Gui03','NumberTitle','off','Position',[200,200,180,150]);

Txt = uicontrol('Style','Text','Position',[20,100,60,20]); June =

uicontrol('Style','PushButton','String','June','Position',[20,60,60,20],...

'CallBack', @JunePressed); July =

uicontrol('Style','PushButton','String','July','Position',[20,20,60,20],...

'CallBack', @JulyPressed); ToggleButton =

uicontrol('Style','ToggleButton','String','Off','Position',[100,60,60,20],...

'CallBack', @ToggleButtonPressed);

uicontrol('Style','PushButton','String','Close','Position',[100,20,60,20],...

'CallBack','close');

function JunePressed(h, eventdata) set(Txt, 'String', 'June'); end;

function JulyPressed(h, eventdata) set(Txt, 'String', 'July'); end;

function ToggleButtonPressed(h, eventdata) if get(ToggleButton, 'Value') == 0 set(ToggleButton, 'String', 'Off'); else

set(ToggleButton, 'String', 'On'); end; end; end

5、radio的使用

function gui04

figure('MenuBar','none','Name','Gui04','NumberTitle','off','Position',[200,200,120,160]);

p = uibuttongroup('Position',[.05,.05,.9,.9]);

uicontrol('Style','RadioButton','String','June','Position',[30,110,60,20],'Parent',p);

uicontrol('Style','RadioButton','String','July','Position',[30,70,60,20],'Parent',p);

uicontrol('Style','RadioButton','String','August','Position',[30,30,60,20],'Parent',p);

6、checkbox的使用

function gui05

figure('MenuBar','none','Name','Gui05','NumberTitle','off','Position',[200,200,280,170]); CheckBox1 =

uicontrol('Style','CheckBox','String','First','Position',[30,100,60,20],...

'CallBack', @CheckBox1Selected);

Text1 = uicontrol('Style','Text','String','First is unselected','Position',[130,100,120,20],... 'HorizontalAlignment','left'); CheckBox2 =

uicontrol('Style','CheckBox','String','Second','Position',[30,60,60,20],...

'CallBack', @CheckBox2Selected);

Text2 = uicontrol('Style','Text','String','Second is unselected','Position',[130,60,120,20],... 'HorizontalAlignment','left');

function CheckBox1Selected(h, eventdata) if get(CheckBox1,'Value')==0

set(Text1,'String','First is unselected'); else

set(Text1,'String','First is selected'); end end

function CheckBox2Selected(h, eventdata)

if get(CheckBox2,'Value')==0

set(Text2,'String','Second is unselected'); else

set(Text2,'String','Second is selected'); end

end end

7、popupmenu使用

function gui06

figure('MenuBar','none','Name','Gui06','NumberTitle','off','Position',[200,200,260,100]); List =

{'January','February','March','April','May','June','July','August',...

'September','October','November','December'}; ListBox =

uicontrol('Style','ListBox','String',List,'Position',[20,20,100,60],...

'CallBack', @ListBoxCallBack); PopupMenu =

uicontrol('Style','PopupMenu','String',List,'Position',[140,60,100,20],...

'CallBack', @PopupMenuCallBack); function ListBoxCallBack(varargin) List = get(ListBox, 'String'); Val = get(ListBox, 'Value');

msgbox(List{Val}, 'Selecting:', 'modal') end;

function PopupMenuCallBack(varargin) List = get(PopupMenu,'String'); Val = get(PopupMenu,'Value');

msgbox(List{Val},'Selecting:','modal') end; end

8、slider与text交互使用

function gui07(arg)

figure('MenuBar','none','Name','Gui07','NumberTitle','off','Position',[200,200,260,60]); Edit =

uicontrol('Style','Edit','String','50','Position',[20,20,100,20],...

'CallBack', @EditCallBack, 'HorizontalAlignment','left'); Slider =

uicontrol('Style','Slider','Position',[140,20,100,20],... 'CallBack', @SliderCallBack, 'Value',50,... 'Min',0,'Max',100);

function EditCallBack(varargin) num = str2num(get(Edit,'String'));

if length(num) == 1 & num <=100 & num >=0 set(Slider,'Value',num); else

msgbox('The value should be a number in the range [0,100]','Error','error','modal'); end end;

function SliderCallBack(varargin) num = get(Slider, 'Value');

set(Edit, 'String', num2str(num)); end; end

9、动态添加菜单

function gui08

fig =

figure('MenuBar','none','Name','Gui08','NumberTitle','off'); m = uimenu('Label','&File');

uimenu(m,'Label','New','Callback','gui08');

uimenu(m,'Label','New Figure','Callback','figure'); uimenu(m,'Label','Quit','Callback','close',... 'Separator','on','Accelerator','Q'); m = uimenu('Label','&Edit'); uimenu(m,'Label','&Undo'); uimenu(m,'Label','&Redo');

uimenu(m,'Label','&Find','Separator','on'); uimenu(m,'Label','&Replace'); m = uimenu('Label','&Help'); uimenu(m,'Label','Help',...

'Callback', @NotImplemented);

uimenu(m,'Label','About','Separator','on',... 'Callback', @About); function About(varargin)

msgbox('This is a demo program','About','help','modal') function NotImplemented(varargin)

msgbox('Operation is not implemented','Warning','warn','modal') 10、弹出式菜单的使用

function gui09 figure;

cmenu = uicontextmenu; [X,Y,Z]=peaks;

surf(X,Y,Z,'UIContextMenu',cmenu)

uimenu(cmenu, 'Label', 'Mesh', 'Callback', {@NotImplemented, 'Mesh'});

uimenu(cmenu, 'Label', 'Surf', 'Callback', {@NotImplemented, 'Surf'});

uimenu(cmenu, 'Label', 'Surfl', 'Callback', {@NotImplemented, 'Surfl'});

function NotImplemented(h, eventdata, op)

msgbox(['Operation ' op ' is not implemented'], ... 'Warning', 'warn', 'modal') 11、弹出式菜单的使用

function gui10

figure('ColorMap',gray); cmenu = uicontextmenu;

uimenu(cmenu, 'Label', 'Hidden off', 'Callback', @HiddenOff); uimenu(cmenu, 'Label', 'Hidden on', 'Callback', @HiddenOn); uimenu(cmenu, 'Label', 'Surface', 'Callback', @Surface); [X,Y,Z]=peaks(25); Surf = surfl(X,Y,Z);

set(Surf,'FaceColor','w','UIContextMenu',cmenu); function HiddenOff(varargin) set(Surf,'FaceColor','none'); end;

function HiddenOn(varargin) set(Surf,'FaceColor','w'); end;

function Surface(varargin)

set(Surf,'FaceColor','flat'); end; end

12、界面点击与绘图交互操作

function gui11

figure('MenuBar','none','Name','Gui11',... 'doublebuffer','on','NumberTitle','off',... 'Position',[200,200,600,500]);

Axes = axes('ButtonDownFcn', @ButtonDown,... 'XLim',[0,1],'YLim',[0,1]);

Points = line('XData',[],'YData',[],... 'LineStyle','None','Marker','*',...

'MarkerFaceColor','b','MarkerEdgeColor','b'); function ButtonDown(varargin) p=get(Axes,'CurrentPoint'); XData=get(Points,'XData'); YData=get(Points,'YData'); XData=[XData,p(1,1)]; YData=[YData,p(1,2)];

set(Points,'XData',XData,'YData',YData); end; end

13、弹出式菜单的使用续

function gui12

fig = figure('MenuBar', 'none', 'Name', 'Gui12', ...

'DoubleBuffer', 'on', 'NumberTitle', 'off', ... 'WindowButtonUpFcn', @ButtonUp, ... 'Position', [200, 200, 600, 500]); ax = axes('ButtonDownFcn',@NewPoint,... 'XLim', [0, 1], 'YLim', [0, 1]); cmenu = uicontextmenu;

uimenu(cmenu, 'Label', 'Delete', 'Callback', @DeletePoint); pnts = line('XData', [], 'YData', [], ... 'ButtonDownFcn', @ButtonDown, ... 'LineStyle','None', ... 'Marker', '*', ...

'MarkerFaceColor', 'b', 'MarkerEdgeColor', 'b', ... 'UIContextMenu', cmenu);

function NewPoint(h, eventdata)

if isequal(get(fig, 'SelectionType'), 'normal') p = get(ax, 'CurrentPoint'); XData = get(pnts, 'XData'); YData = get(pnts, 'YData'); XData = [XData, p(1,1)]; YData = [YData, p(1,2)];

set(pnts, 'XData', XData, 'YData', YData); end; end;

function ButtonDown(h, eventdata) p = get(ax, 'CurrentPoint'); p = p(1, 1:2);

XData = get(pnts, 'XData'); YData = get(pnts, 'YData');

moving_point = FindPoint(p, XData, YData);

set(fig, 'WindowButtonMotionFcn', @MovePoint, ... 'Pointer', 'Circle');

function MovePoint(h, eventdata) p = get(ax, 'CurrentPoint'); p = p(1, 1:2);

XData(moving_point) = p(1); YData(moving_point) = p(2);

set(pnts, 'XData', XData, 'YData', YData); end; end;

function ButtonUp(h, eventdata)

set(fig, 'WindowButtonMotionFcn', '', ... 'Pointer', 'Arrow'); end;

function DeletePoint(h, eventdata)

p = get(ax,'CurrentPoint'); p = p(1, 1:2);

XData = get(pnts, 'XData'); YData = get(pnts, 'YData'); i = FindPoint(p, XData, YData); XData(i) = []; YData(i) = [];

set(pnts, 'XData', XData, 'YData', YData); end;

function i = FindPoint(p, XData, YData);

[m, i] = min((XData - p(1)).^2 + (YData - p(2)).^2); end; end

14、动态增加工具条

function gui13

h = figure('ToolBar','none') ht = uitoolbar(h) a = [.05:.05:0.95];

b(:,:,1) = repmat(a,19,1)'; b(:,:,2) = repmat(a,19,1);

b(:,:,3) = repmat(flipdim(a,2),19,1); hpt =

uipushtool(ht,'CData',b,'TooltipString','Hello','ClickedCallBack','') hpt =

uitoggletool(ht,'CData',b,'TooltipString','Hello','OnCallBack','','OffCallBack','')

15、字体切换

clf reset

set(gcf, 'menubar' , 'none' )

set(gcf, 'unit' , 'normalized' , 'position' ,[0.2,0.2,0.64,0.32]); set(gcf, 'defaultuicontrolunits' , 'normalized' ) h_axes=axes( 'position' ,[0.05,0.2,0.6,0.6]); t=0:pi/50:2*pi;y=sin(t);plot(t,y); set(h_axes, 'xlim' ,[0,2*pi]);

set(gcf, 'defaultuicontrolhorizontal' , 'left' ); htitle=title( ' ÕýÏÒÇúÏß ' );

set(gcf, 'defaultuicontrolfontsize' ,12); uicontrol( 'style' , 'frame' , ... 'position' ,[0.67,0.55,0.25,0.25]); uicontrol( 'style' , 'text' , ... 'string' , ' ÕýбÌåͼÃû :' , ...

'position' ,[0.68,0.77,0.18,0.1], ... 'horizontal' , 'left' );

hr1=uicontrol(gcf, 'style' , 'radio' , ... 'string' , ' ÕýÌå ' , ... 'position' ,[0.7,0.69,0.15,0.08]); set(hr1, 'value' ,get(hr1, 'Max' )); set(hr1, 'callback' ,[ ...

'set(hr1,''value'',get(hr1,''max'')),' , ... 'set(hr2,''value'',get(hr2,''min'')),' , ... 'set(htitle,''fontangle'',''normal''),' , ... ]);

hr2=uicontrol(gcf, 'style' , 'radio' , ... 'string' , ' бÌå ' , ... % 'position' ,[0.7,0.58,0.15,0.08], ... 'callback' ,[ ...

'set(hr1,''value'',get(hr1,''min'')),' , ... 'set(hr2,''value'',get(hr2,''max'')),' , ... 'set(htitle,''fontangle'',''italic'')' , ... ]);

ht=uicontrol(gcf, 'style' , 'toggle' , ... 'string' , 'Grid' , ...

'position' ,[0.67,0.40,0.15,0.12], ... 'callback' , 'grid' );

16、slider与绘图交互操作

clf reset

set(gcf, 'unit' , 'normalized' , 'position' ,[0.1,0.2,0.64,0.35]); set(gcf, 'defaultuicontrolunits' , 'normalized' ); set(gcf, 'defaultuicontrolfontsize' ,12);

set(gcf, 'defaultuicontrolfontname' , ' Á¥Êé ' ); set(gcf, 'defaultuicontrolhorizontal' , 'left' ); str= ' ¹éÒ»»¯¶þ½×ϵͳ½×Ô¾ÏìÓ¦ÇúÏß ' ;

set(gcf, 'name' ,str, 'numbertitle' , 'off' ); h_axes=axes( 'position' ,[0.05,0.2,0.6,0.7]); set(h_axes, 'xlim' ,[0,15]); str1= ' µ±Ç°×èÄá±È =' ;

t=0:0.1:10;z=0.5;y=step(1,[1 2*z 1],t); hline=plot(t,y);

htext=uicontrol(gcf, 'style' , 'text' , ... 'position' ,[0.67,0.8,0.33,0.1], ...

'string' ,[str1,sprintf( '%1.4g\\' ,z)]);

hslider=uicontrol(gcf, 'style' , 'slider' , ... 'position' ,[0.67,0.65,0.33,0.1], ...

'max' ,2.02, 'min' ,0.02, ... 'sliderstep' ,[0.01,0.05], ... 'Value' ,0.5);

hcheck1=uicontrol(gcf, 'style' , 'checkbox' , ... 'string' , ' ×î´ó·åÖµ ' , ...

'position' ,[0.67,0.50,0.33,0.11]); vchk1=get(hcheck1, 'value' );

hcheck2=uicontrol(gcf, 'style' , 'checkbox' , ... 'string' , ' ÉÏÉýʱ¼ä (0->0.95)' , ... 'position' ,[0.67,0.35,0.33,0.11]); vchk2=get(hcheck2, 'value' ); % set(hslider, 'callback' ,[ ... 'z=get(gcbo,''value'');' , ...

'callcheck(htext,str1,z,vchk1,vchk2)' ]); set(hcheck1, 'callback' ,[ ...

'vchk1=get(gcbo,''value'');' , ...

'callcheck(htext,str1,z,vchk1,vchk2)' ]); set(hcheck2, 'callback' ,[ ...

'vchk2=get(gcbo,''value'');' , ...

'callcheck(htext,str1,z,vchk1,vchk2)' ]); 17、一个简单的计算器

function varargout = yunsuan(varargin) gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @yunsuan_OpeningFcn, ... 'gui_OutputFcn', @yunsuan_OutputFcn, ... 'gui_LayoutFcn', [], ... 'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

function yunsuan_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

guidata(hObject, handles);

function varargout = yunsuan_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

function num1_Callback(hObject, eventdata, handles) input = str2num(get(hObject,'String'));

function num1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function num2_Callback(hObject, eventdata, handles) input = str2num(get(hObject,'String'));

function num2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function plus_Callback(hObject, eventdata, handles) a=get(handles.num1,'String'); b=get(handles.num2,'String');

result = str2num(a) + str2num(b);

set(handles.result, 'String', result);

function subtract_Callback(hObject, eventdata, handles) a=get(handles.num1,'String'); b=get(handles.num2,'String');

result = str2num(a) -str2num(b);

set(handles.result, 'String', result);

function multiply_Callback(hObject, eventdata, handles) a=get(handles.num1,'String'); b=get(handles.num2,'String'); result = str2num(a)*str2num(b);

set(handles.result, 'String', result);

function divide_Callback(hObject, eventdata, handles) a=get(handles.num1,'String'); b=get(handles.num2,'String');

result = str2num(a) /str2num(b);

set(handles.result, 'String', result);

function reset_Callback(hObject, eventdata, handles) set(handles.num1, 'String',0); set(handles.num2, 'String',0); set(handles.result, 'String',0);

function exit_Callback(hObject, eventdata, handles) close('yunsuan');

因篇幅问题不能全部显示,请点此查看更多更全内容

Top