3

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

更新:我尝试了可用于创建选项卡的 GUI 布局工具箱。但是我现在如何将我已经存在的 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 吗?

4

3 回答 3

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也可以)成为此函数的参数,从而将您想要停靠到组中的所有图形句柄传递给它。

您不需要为此提供工具箱。

我想我应该注意到这一切都是基于未记录的功能。methodsview我通常通过大量使用所涉及的单个 java 对象来处理这类事情。

于 2013-10-07T12:44:49.817 回答
2

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

于 2013-10-04T10:44:16.053 回答
2

组合几个的一种方法GUI是使用额外的GUI.

  • GUI用 3 个按钮创建一个 main
  • 在打开函数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'); 
于 2013-10-07T13:09:45.560 回答