由于前段时间,一直在从事MATLAB GUI方面的设计工作,尤其是在多界面切换方面的经验尤其多,所以分享出来。
首先是多切面切换的问题,这是个简单的问题,其实就是新建一个GUI,然后在GUI上创建多面板的工作
然后选择左侧菜单栏的倒数第二行第二个“面板”按钮,新建两个uipanel。如下图所示。两个面板我分别命名为面板1、面板2.
然后我们可以把需要添加的组件添加到两个面板中去。
其实本质上就是将原来创建在GUI里的组件装在面板里了而已,没有任何难度。
再接着,添加两个按钮,实现界面切换,功能需求就是,点击功能一,显示面板1,隐藏面板2;点击功能二,显示面板2,隐藏面板1。这个也不难,只需要打开按钮“功能一”的回调函数,里面添加这两个语句即可。
set(handles.uipanel1,'visible','on');
set(handles.uipanel2,'visible','off');
类比可以得到显示面板2,隐藏面板1的功能。
肯定有小伙伴好奇怎么将两个面板显示在同一位置,并且通过也可以实现切换功能。
我用的方法是用代码调整面板的位置,具体代码为:
set(handles.uipanel1,'position',[0 0 0]);
MATLAB里的坐标表示需要读者提前去熟悉一下,数值之间别加逗号。想通过这种方法实现同一位置界面切换,需要满足两个条件。
一:两个面板差不多大,这一点你可以通过上面的语句设置,也可以创建面板时就将面板设置为差不多大。
二:两个面板不存在父子关系,如果panel1和panel2之间存在父子关系,那么可以通过下面的语句来调整:
handles.output = hObject;
set(handles.uipanel1,'parent',gcf);
set(handles.uipanel2,'parent',gcf);
这两个语句是在GUI的OpeningFcn(hObject, eventdata, handles, varargin)下边添加,当然我不保证能成功,这个可能和MATLAB的版本有关,看其他博客里有人实现的,姑且认为可以吧。
当然我用的方法比较笨,即创建面板上之后再将面板挪到重叠到一起。这是个细心的活儿,你需要保证两个面板的元素不存在遮挡,要不然还是会出现其中一个面板在点击按钮之后跳到页面左下角的情况。对于这种情况大家可以参考其他博客。
然后大家解决MATLAB问题的时候,可以考虑去MATLAB论坛,虽然上面很多问题都没有答案,甚至于很多帖子都是2008年的老问题。MATLAB中文论坛真该出个精品问答板块了。当然也有人推荐去stack overflow,用英文问问题还是很费力,听说90%的编程问题都能在上面找到答案。
最后讲一下将GUI生成exe的方法,MATLAB命令行直接出入deploytool,出现下图
选择第一个,之后进入
在add main file处选择你产生的GUI对应的.m文件,然后添加文件依赖,点击package,慢慢等待即可。最后生成的exe可能会无法运行,这里面的原因千奇百怪,博客、论坛也没有一个完美的解决方案,像.dll库添加进去exe也无法运行,这个问题问过许多网友,没一个知道怎么解决的。如果有人有什么新的技巧,解决exe无法运行的,还希望在评论里告知。
这次的分享到这里结束了,我要投身到下一个工作中去了,再见。