如何将多个MATLAB GUI组合起来

3
我有几个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?

这就是为什么我说可能需要在现有GUI和新的/主要GUI之间进行一些重写/接口编写。本质上,您现有的GUI应该成为每个选项卡的子级。(我认为) - am304
你能给我一个例子吗?我不确定如何实现这个。 - C.Colden
以下是有关 TabPanel 类的帮助文档:f = figure(); p = uiextras.TabPanel('Parent', f, 'Padding', 5); uicontrol('Style', 'frame', 'Parent', p, 'Background', 'r'); uicontrol('Style', 'frame', 'Parent', p, 'Background', 'b'); uicontrol('Style', 'frame', 'Parent', p, 'Background', 'g'); p.TabNames = {'红色', '蓝色', '绿色'}; p.SelectedChild = 2;然后您可以添加更多现有GUI中的 uicontrol 和其他内容。 - am304
你会如何建议在特定选项卡中添加一个按钮?由于不允许这样做,因此您无法将其添加为父级。有什么解决方法吗? - C.Colden
1
请查看http://blogs.mathworks.com/pick/2010/06/18/gui-layout-part-7/中的示例。选项卡是面板,您需要在添加`uicontrol`对象(如按钮)之前在面板内添加框。如果您下载并安装了该工具箱,则具有相当广泛的文档。 - am304
3个回答

3
在我看来,这主要取决于各个GUI的实现方式。如果所有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来实现这种类型的操作。


我喜欢将GUI组合在一起的想法。有没有简单的方法(不涉及其他工具箱)将2个GUI组合在一起?据我所知,它们看起来像是“磁性的”,因此会互相吸附,是这样吗? - C.Colden
有没有办法只调整弹出GUI的位置?因为这个解决方案需要使用图形而不是GUI。 - C.Colden

2

从File Exchange中尝试使用GUI布局工具箱,它可以创建标签式GUI界面,这在MATLAB中不是默认支持的。可能需要对现有的GUI进行一些重写,以便使它们能够与用于主GUI的GUI布局工具箱配合使用,但希望这样的重写最小化。


谢谢您提供这个工具箱的链接。它提供了很多优秀的功能,但是不允许合并GUI界面。不知道你有没有看到什么可能的方法?GUI界面相当复杂,重新做一个不是非常高效的选择。 - C.Colden

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'); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接