失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Matlab GUI编程技巧(六):从一个GUI界面跳转到另一个GUI界面以及GUI窗口间数据传递

Matlab GUI编程技巧(六):从一个GUI界面跳转到另一个GUI界面以及GUI窗口间数据传递

时间:2018-11-22 09:59:23

相关推荐

Matlab GUI编程技巧(六):从一个GUI界面跳转到另一个GUI界面以及GUI窗口间数据传递

🔗运行环境:Matlab🚩 撰写作者:左手の明天🥇 精选专栏:《python》🔥 推荐专栏:《算法研究》

💗 大家好🤗🤗🤗,我是左手の明天!💗

📆 最近更新: 年 5 月 21 日,左手の明天的第243篇原创博客

📚更新于专栏:Matlab GUI编程技巧

🚩1 GUI 设计启动方法

方法一:命令行输入guide,回车

如下图所示

方法二:点击主页上的新建->APP->GUIDE

如下图所示

两种方法都能够得到下面的对话框,选择“Blank GUI(Default)”并且设置.fig文件存放位置

点击确定,得到两个文件,一个是.m文件,另一个是.fig文件,gui.m & gui.fig

.m文件用于编辑GUI中控件所需要的回调代码.fig文件可以用鼠标拖拽等比较简单的操作进行初始的界面设计

进入GUI编辑界面之后,左侧是各种控件:按钮,文本框,表格,文本,复选框等,右侧是界面,如下图所示:

将左侧控件直接拖到右侧界面,注意布局,双击任意控件可以弹出控件的属性检查器,这里可以更改控件的初始属性,并且可以查看控件的tag值,用于回调程序的句柄调用。

🚩2 GUI界面之间的跳转

在同一路径下制作出两个界面gui.m & gui.figgui2.m & gui2.fig

这里默认gui和gui2的Tag值分别是Figure1和Figure2

注意:在gui这个界面中需要创建一个进行跳转的按钮

创建了一个“Open a new figure”按钮,这个按钮就是用来实现界面跳转功能的

⭐️2.1 情形一:打开gui2且保留gui

先设置gui2的Visible为'off'(双击GUI设计界面空白处设置),然后在gui的按钮——查看回调——call back中写下如下代码:

g=gui2;set(g,'Visible','on');

若想在gui2中设置控件关闭gui2,则在该控件的Callback中输入以下代码:

set(handles.Figure2,'Visible','off');或者close(gui2);

⭐️2.2 情况二:打开gui2且关闭gui

在gui的控件的Callback中输入以下代码:

g=gui2;set(g,'Visible','on');set(handles.Figure1,'Visible','off'); % close(gui)

⭐️2.3 handles在两个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);

🚩3 GUI 多界面数据传递

在同一路径下制作出两个界面gui.m & gui.figgui2.m & gui2.fig,在gui2中调用gui的参数

首先在gui中进行参数输入操作,主要分两种情况:

⭐️3.1 返回值只有一个

在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中。

⭐️3.2 返回值有多个以上

在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 数据或者变量名;

⭐️3.3 测试代码

(代码:主窗口 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.timesdelete(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个字,码字总结不易,老铁们来个三连:点赞、关注、评论🌟🌟

🌟🌟作者:左手の明天🌟🌟

🌟🌟原创不易,转载请联系作者并注明出处🌟🌟

如果觉得《Matlab GUI编程技巧(六):从一个GUI界面跳转到另一个GUI界面以及GUI窗口间数据传递》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。