- 运行环境:Matlab
- 撰写作者:左手の明天
- 精选专栏:《python》
- 推荐专栏:《算法研究》
大家好,我是左手の明天!
最近更新:2022 年 5 月 21 日,左手の明天的第 243 篇原创博客
更新于专栏:Matlab GUI编程技巧
方法一:命令行输入guide,回车
如下图所示
方法二:点击主页上的新建->APP->GUIDE
如下图所示
两种方法都能够得到下面的对话框,选择“Blank GUI(Default)”并且设置.fig文件存放位置
点击确定,得到两个文件,一个是.m文件,另一个是.fig文件,gui.m & gui.fig
- .m文件用于编辑GUI中控件所需要的回调代码
- .fig文件可以用鼠标拖拽等比较简单的操作进行初始的界面设计
进入GUI编辑界面之后,左侧是各种控件:按钮,文本框,表格,文本,复选框等,右侧是界面,如下图所示:
将左侧控件直接拖到右侧界面,注意布局,双击任意控件可以弹出控件的属性检查器,这里可以更改控件的初始属性,并且可以查看控件的tag值,用于回调程序的句柄调用。
在同一路径下制作出两个界面:gui.m & gui.fig
和gui2.m & gui2.fig
:
这里默认gui和gui2的Tag值分别是Figure1和Figure2
注意:在gui这个界面中需要创建一个进行跳转的按钮
创建了一个“Open a new figure”按钮,这个按钮就是用来实现界面跳转功能的
先设置gui2的Visible为'off'(双击GUI设计界面空白处设置),然后在gui的按钮——查看回调
——call back
中写下如下代码:
g=gui2;
set(g,'Visible','on');
若想在gui2中设置控件关闭gui2,则在该控件的Callback中输入以下代码:
set(handles.Figure2,'Visible','off');
或者
close(gui2);
在gui的控件的Callback中输入以下代码:
g=gui2;
set(g,'Visible','on');
set(handles.Figure1,'Visible','off'); % close(gui)
open gui2.fig打开的仅仅是figure文件,直接用文件名调用就行。例如在gui.m中用语句gui2(handles)调用,在gui的OpeningFcn中用gui2Handles = varargin{1}来接收gui2的控件句柄。
在callback后写上:
fig=openfig('gui2.fig');
handles = guihandles(fig);
guidata(fig, handles);
在同一路径下制作出两个界面:gui.m & gui.fig
和gui2.m & gui2.fig,
在gui2中调用gui的参数
首先在gui中进行参数输入操作,主要分两种情况:
在gui中OpeningFcn的代码:
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = 数据或者变量名;
在gui中OutputFcn的代码:
function varargout = gui_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
在gui2中的buttonCallback下输入
function pushbutton1_Callback(hObject, eventdata, handles)
data=gui;
则gui的结果就传递到data中。
在gui中OpeningFcn的代码:
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = 数据1或者变量名1;
handles.secend_output = 数据2或者变量名2;
handles.thrid_output = 数据3或者变量名3;
...........................
在gui中OutputFcn的代码:
function varargout = gui_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
varargout{2} = handles.secend_output;
varargout{3} = handles.thrid_output;
........................
同时对返回值为多参数的情况gui2中则改为
function pushbutton1_Callback(hObject, eventdata, handles)
[data1,data2,data3,....]=gui;
如果数据或者变量是在同一个GUI中别的控件或执行中输入的,将数据或者变量名定义为全局变量就可,即:
global 数据或者变量名;
(代码:主窗口 gui2.m ,子窗口 gui.m )
主窗口:
% 返回子窗口按钮--------------------------------------------
function pushbutton1_Callback(hObject, eventdata, handles)
set(handles.figure1,'Visible','off'); %隐藏主窗口
times=gui(handles.figure1); % times是从子窗口(gui窗口)中获得的参数。打开子窗口(gui窗口),同时将主窗口的句柄(handles.figure1)作为参数传给子窗口。通过这个句柄在窗体之间传递数据。
set(handles.text2,'String',num2str(times));子窗口:
% 窗体打开之前,先执行该函数------------------------------------
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
wind=varargin{1}; %将从主窗体中获取的参数,保存到wind变量中
handles.mainhandles=guihandles(wind); %获得主窗口的handles句柄。窗体之间传递数据通过这个handles句柄。
handles.times=0; %子窗体内部的全局变量,只可以在子窗体内部的各个函数之间传递数据。
guidata(hObject, handles); %更新数据
uiwait(handles.figure1); % 执行完该函数后,不会立即执行输出函数(ch1_OutputFcn),而是等待用户的操作。与 uiresume() 配合使用
% 输出函数,通过该函数在窗体之间传递参数--------------------------------------------
function varargout = gui_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.times; % 将输出参数设置成handles.times
delete(handles.figure1); %删除子窗体(也可以隐藏子窗体)
% 加按钮----------------------------------------
function pushbutton1_Callback(hObject, eventdata, handles)
handles.times=handles.times+1;
guidata(hObject, handles);
set(handles.text2,'String',num2str(handles.times));
% 返回主窗体按钮----------------------------------------
function pushbutton2_Callback(hObject, eventdata, handles)
set(handles.mainhandles.figure1,'Visible','on'); %显示主窗口
uiresume(handles.figure1); %与 uiwait() 配合使用。唤醒 uiwait() 函数
全文共3624个字,码字总结不易,老铁们来个三连:点赞、关注、评论
作者:左手の明天
原创不易,转载请联系作者并注明出处