🔗 运行环境:Matlab
🚩 撰写作者:左手の明天
🥇 精选专栏:《python》
🔥 推荐专栏:《算法研究》
💗 大家好🤗🤗🤗,我是左手の明天!💗
📆 最近更新:2022 年 6 月 19 日,左手の明天的第 261 篇原创博客
📚 更新于专栏:Matlab GUI编程技巧
界面

当分别点击按钮“螺旋线”、“内摆线”、“圆旋转成圆环”和“退出”命令按钮时,分别出现如下列图示的动态、静态的结果。
螺旋线图

内摆线图

圆动成环图

退出信息图

1)启动Matlab并进入GUIDE环境
在Command Window下输入“guide”,进入GUIDE环境。出现如下图所示的界面(。这里Matlab提供了一个新建空白界面及三个样本界面,它们分别是:GUI with Uicontrols;GUI with Axes and Menu;Modal Question Dialog;当然还有一个标签是用来打开已经编写好的GUI的。一般来说,我们会用Blank GUI,即空白的界面来写自己的东西。进入后,Matlab就新建了一个fig文件(默认名是untitled.fig),同时得到如下的编辑窗口:

从上图我们可以看出Matlab 的Guide环境可以分为三个部分即菜单栏和工具栏、用户控件集、用户界面编辑窗口。
我们主要使用用户控件集(其它软件一般称为工具箱),用户控件集主要有命令按钮(Push Button)、切换按钮(Toggle Button)、单选按钮(Radio Button)、复选框按钮(Checkbox)、编辑框(Edit Button)、静态文本框(Static Button)、滚动杆(Slider)、列表框(Listbox)、弹出式菜单(Pop-menu)、坐标轴(Axes)等。严格地讲, 坐标轴不能算控件的范畴。用户界面编辑窗口用于对受控的图形窗口进行编辑, 比如添加按钮、静态文本框等。
2)在用户界面编辑窗口添加相应控件
首先,在用户界面编辑窗口添加4个命令按钮(显示是OK的用个PUSH BUTTON),再如下图所示添加5个静态文本框(Static Text)、5个编辑文本框(Edit Text)和一个坐标系(Axes)

其次,按下表设置每个控件的属性值(具体操作是:右击要设置属性的控件——property inspector 命令——在弹出的属性窗口中找到相应的属性名称——将该属性的值修改成自己需要的值)
| 控件名 | 属性 | 属性修改值 |
| PushButton1 | FontSize | 16 |
|
| String | 螺旋线 |
|
| Tag | pushbuttonLxx |
| PushButton2 | FontSize | 16 |
|
| String | 内摆线 |
|
| Tag | pushbuttonNBX |
| PushButton3 | FontSize | 16 |
|
| String | 圆旋转成圆环 |
|
| Tag | pushbuttonCtoC |
| PushButton4 | FontSize | 16 |
|
| String | 退出 |
|
| Tag | pushbuttonExit |
| Static Text1 | String | 大圆半径 |
| Static Text2 | String | 小圆半径 |
| Static Text3 | String | 修正值 |
| Static Text4 | String | 圆半径 |
| Static Text5 | String | 离转轴的距离 |
| Edit Text1 | String | 空或设置成一个适定值,如10 |
|
| Tag | editBCR |
| Edit Text2 | String | 空或设置成一个适定值,如2 |
|
| Tag | editSCR |
| Edit Text3 | String | 空或设置成一个适定值,如1 |
|
| Tag | editXZZ |
| Edit Text4 | String | 空或设置成一个适定值,如4 |
|
| Tag | editCR |
| Edit Text5 | String | 空或设置成一个适定值,如10 |
|
| Tag | editBExit |
最后,添加程序(在添加程序前,最好先将文件保存一下,比如以Exp8.m为文件名保存),添加程序的常用方法是:单击菜单命令view——M-file Editor,此时,得到下面的程序:
- function varargout = Exp8(varargin)
- gui_Singleton = 1;
- gui_State = struct('gui_Name', mfilename, ...
- 'gui_Singleton', gui_Singleton, ...
- 'gui_OpeningFcn', @Exp8_OpeningFcn, ...
- 'gui_OutputFcn', @Exp8_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 Exp8_OpeningFcn(hObject, eventdata, handles, varargin)
- handles.output = hObject;
- guidata(hObject, handles);
-
- %上面的代码,告诉我们,一般的用户界面的自己设置的初始化状态应添加在这个函数内。
- function varargout = Exp8_OutputFcn(hObject, eventdata, handles)
- varargout{1} = handles.output;
- %上面的函数返回的量直接到命令窗口。
- function pushbuttonLxx_Callback(hObject, eventdata, handles)
- %上面的函数是点击螺旋线按钮时,执行的代码,即可以在此处添加有关螺旋线的程序代码。
- function pushbuttonNBX_Callback(hObject, eventdata, handles)
- %上面的函数是点击内摆线按钮时,执行的代码,即可以在此处添加有关内摆线的程序代码。
-
- % --- Executes on button press in pushbuttonExit.
- function pushbuttonExit_Callback(hObject, eventdata, handles)
- %上面的函数是点击退出按钮时,执行的代码,即可以在此处添加退出时的程序代码。
- function editBCR_Callback(hObject, eventdata, handles)
- %上面的函数是 editBCR这个编辑文本按钮回调时,执行的代码。
- BigCircleRadial=str2double(get(hObject,'String'));
- function editBCR_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editBCR的属性值。
- function editSCR_Callback(hObject, eventdata, handles)
- %上面的函数是editSCR这个编辑文本按钮回调时,执行的代码。
- function editSCR_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editSCR的属性值。
-
- function editXZZ_Callback(hObject, eventdata, handles)
- %上面的函数是editXZZ这个编辑文本按钮回调时,执行的代码。
-
- function editXZZ_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editXZZ的属性值。
-
- function pushbuttonCtoC_Callback(hObject, eventdata, handles)
- %上面的函数是点击圆旋转成圆环按钮时,执行的代码,即可以在此处添加圆旋转成圆环时的程序代码。
- function editCR_Callback(hObject, eventdata, handles)
- %上面的函数是editCR这个编辑文本按钮回调时,执行的代码。
- function editCR_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editCR的属性值。
- function editDist_Callback(hObject, eventdata, handles)
- function editDist_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editDist的属性值。
- function varargout = Exp8(varargin)
- gui_Singleton = 1;
- gui_State = struct('gui_Name', mfilename, ...
- 'gui_Singleton', gui_Singleton, ...
- 'gui_OpeningFcn', @Exp8_OpeningFcn, ...
- 'gui_OutputFcn', @Exp8_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 Exp8_OpeningFcn(hObject, eventdata, handles, varargin)
- handles.output = hObject;
- guidata(hObject, handles);
- %这里选择了一个图片文件,作为初始画面,具体的图片可以选择自己喜欢的。
- map1=imread('Water lilies.jpg');
- image(map1)
- %上面的代码,告诉我们,一般的用户界面的自己设置的初始化状态应添加在这个函数内。
-
- function varargout = Exp8_OutputFcn(hObject, eventdata, handles)
- varargout{1} = handles.output;
- %上面的函数返回的量直接到命令窗口。
-
- function pushbuttonLxx_Callback(hObject, eventdata, handles)
- %上面的函数是点击螺旋线按钮时,执行的代码,即可以在此处添加有关螺旋线的程序代码。
- axes(handles.axes1)
- cla
- v=2;
- alf=pi/6;
- omg=pi/5;
- t=0:0.01:100;
- x=v*sin(alf).*cos(omg*t).*t;
- y=v*sin(alf).*sin(omg*t).*t;
- z=v*cos(alf).*t;
- %plot3(x,y,z)
- axis([-100 100 -100 100 0 160])
- grid on
- axis equal on
- comet3(x,y,z)
- %上面的程序是“一质点,沿着已知圆锥面的一条直母线自圆锥的顶点起,作等速直线运动,另一方面这一条母线在圆锥面上,过圆锥的顶点绕圆锥的轴(旋转轴)作等速的转动,这时质点在圆锥面上的轨迹”的动态形成过程。
-
- function pushbuttonNBX_Callback(hObject, eventdata, handles)
- %上面的函数是点击内摆线按钮时,执行的代码,即可以在此处添加有关内摆线的程序代码。
- axes(handles.axes1)
- cla
- a=str2double(get(handles.editBCR,'String'));
- b=str2double(get(handles.editSCR,'String'));
- k=str2double(get(handles.editXZZ,'String'));
- axis([-a-2 a+2 -a-2 a+2 0 a+2])
- line([-a-2,a+2],[0,0]);
- hold on
- line([0,0],[-a-2,a+2
- u=0:pi/30:2*pi;
- x=a*cos(u);
- y=a*sin(u);
- plot(x,y)
- x=b*cos(u)+a-b;
- y=b*sin(u);
- plot(x,y)
- axis equal on
- grid on
- theta=0:pi/1800:k*a*pi;
- x=(a-b)*cos(b/a*theta)+b*cos((a-b)/a*theta);
- y=(a-b)*sin(b/a*theta)-b*sin((a-b)/a*theta);
- comet(x,y)
- %上面的程序是内摆线的动态的形成过程
-
- % --- Executes on button press in pushbuttonExit.
- function pushbuttonExit_Callback(hObject, eventdata, handles)
- %上面的函数是点击退出按钮时,执行的代码,即可以在此处添加退出时的程序代码。
- ss=questdlg('你真的要退出吗?','退出信息窗口!','不,我还想看看!','是的,我要退出!','是的,我要退出!');
- switch ss
- case '是的,我要退出!'
- delete(handles.figure1);
- end
- %上面的程序是退出程序时信息窗口
-
- function editBCR_Callback(hObject, eventdata, handles)
- %上面的函数是 editBCR这个编辑文本按钮回调时,执行的代码。
- function editBCR_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editBCR的属性值。
-
- function editSCR_Callback(hObject, eventdata, handles)
- %上面的函数是editSCR这个编辑文本按钮回调时,执行的代码。
- function editSCR_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editSCR的属性值。
-
- function editXZZ_Callback(hObject, eventdata, handles)
- %上面的函数是editXZZ这个编辑文本按钮回调时,执行的代码。
-
- function editXZZ_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editXZZ的属性值。
-
- function pushbuttonCtoC_Callback(hObject, eventdata, handles)
- %上面的函数是点击圆旋转成圆环按钮时,执行的代码,即可以在此处添加圆旋转成圆环时的程序代码。
- axes(handles.axes1)
- cla
- %a=4;
- %b=10;
- a=str2double(get(handles.editCR,'String'));
- b=str2double(get(handles.editDist,'String'));
- u=0:pi/30:2*pi;
- y=a.*cos(u)+b;
- z=a.*sin(u);
- n=length(u);
- x=0*ones(1,n);
- if a<b
- axis([-b-2 b+2 -b-2 b+2 -a-2 a+2])
- else
- axis([-a-2 a+2 -a-2 a+2 -b-2 b+2])
- end
- plot3(x,y,z)
- pause(1)
- for t=0:pi/60:2*pi
- x=y.*sin(t);
- y1=y.*cos(t);
- plot3(x,y1,z)
- pause(0.1)
- grid on
- hold on
- %axis equal on
- %view([-20,0])
- end
- %上面的程序是圆旋转成圆环的动态的形成过程
-
- function editCR_Callback(hObject, eventdata, handles)
- %上面的函数是editCR这个编辑文本按钮回调时,执行的代码。
- function editCR_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editCR的属性值。
-
- function editDist_Callback(hObject, eventdata, handles)
- function editDist_CreateFcn(hObject, eventdata, handles)
- if ispc
- set(hObject,'BackgroundColor','white');
- else
- set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
- end
- %上面的函数用来在程序中设置editDist的属性值。
🌟全文共 8154 个字,码字总结不易,老铁们来个三连:点赞、关注、评论🌟
🌟作者:左手の明天🌟
🌟原创不易,转载请联系作者并注明出处🌟
