如何组合几个MATLAB GUI

时间:2013-10-04 10:39:37

标签: matlab layout user-interface matlab-guide

我有几个GUI,我想将它组合成一个“主”GUI,我可以在不同的选项卡中选择所有的GUI。有没有办法做到这一点,而无需从头开始构建GUI? 只是说清楚:
GUI 1数据加载
GUI 2数据预处理
GUI 3数据分析
主GUI =应该有3个选项卡,具有相同的布局等,就像现有的GUI

一样

更新: 我尝试了GUI Layout Toolbox,可以用来创建标签。但是,我现在如何将现有的GUI包含在每个标签中?

f = figure();
p = uiextras.TabPanel();
uicontrol( 'Parent', p);
uicontrol( 'Parent', p);
uicontrol( 'Parent', p);
p.TabNames = {'Data Loading', 'Data Preprocessing', 'Data Analysis'};
p.TabSize = 100;

更新2: 还有其他选项可以组合多个GUI吗?

3 个答案:

答案 0 :(得分:3)

恕我直言,这很大程度上取决于个人guis的实施。 如果所有GUI都使用guidata和父图的属性(组合后只有一个),那么如果不重新处理所有GUI,这很快就会变得不可能或至少变得混乱。

另一种可能性是将数字停靠在一个桌面组中。 这样,每个GUI都将保持隔离状态,并且不需要对其实现进行更改。 参见例如

http://www.mathworks.nl/matlabcentral/fileexchange/18106-manage-and-dock-figures-into-group

有关如何将数字停靠到一个桌面组的示例。

修改

一个快速而又肮脏的例子:

function dockTest()

    GROUPNAME = 'MyGUIs';
    desktop = com.mathworks.mde.desk.MLDesktop.getInstance();
    group = desktop.addGroup(GROUPNAME);
    desktop.showGroup(GROUPNAME,1);

    % create some dummy-figures:
    for i=1:2
        figureList(i) = figure('name', ['GUI ', num2str(i)],...
                               'numbertitle','off');
    end

    % dock figures in list:
    for i=1:numel(figureList)
        f = figureList(i);
        jf = get(handle(f), 'JavaFrame');
        jf.setGroupName(GROUPNAME);
        set(f, 'WindowStyle', 'docked');
    end

end

你应该能够简单地使figureList(也许GROUPNAME)成为这个函数的一个参数,从而将你想要停靠的所有数字句柄传递给一个组。

您不需要工具箱。

我想我应该注意到这一切都是基于未记录的功能。 我经常通过在所涉及的各个java对象上大量使用methodsview来解决这类问题。

答案 1 :(得分:2)

尝试使用文件交换中的GUI Layout Toolbox,它允许使用选项卡式GUI,这些GUI在MATLAB中不支持开箱即用。可能会对您现有的GUI进行一些重写,以使它们与用于主GUI的GUI Layout Toolbox一起使用,但希望这应该是最小的。

答案 2 :(得分:2)

合并多个GUI的一种方法是使用额外的GUI来操纵其可见性。

  • 使用3个按钮
  • 创建一个主GUI
  • 在开场功能OpeningFcn中,使用
  • 调用您的3 gui并将其句柄保存在工作区中
STATE(1) = dataLoading; 
STATE(2) = dataProcessing; 
STATE(3) = dataAnalyzing;
assignin('base', 'STATE', STATE);

%make the first one visible
set(STATE(1),'Visible','on'); 
set(STATE(2),'Visible','off'); 
set(STATE(3),'Visible','off');     
  • pushbutton_Callback中,检索STATE并设置可见性属性
STATE  = evalin('base', 'STATE');
set(STATE(1),'Visible','off'); 
set(STATE(3),'Visible','off'); 
set(STATE(2),'Visible','on');