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');
因篇幅问题不能全部显示,请点此查看更多更全内容