如何在MatLab的图形中嵌入另一个图形?

问题描述 投票:2回答:1

我正在使用上一篇文章中的UITab和UITabGroup为我的MatLab代码开发GUI:

How do I create a tabbed GUI in MatLab?

但是,该代码在单个函数中填充每个选项卡ui。由于我的用户界面比这更复杂,我希望使用它自己的函数.m文件为每个选项卡创建一个图形,然后将该图形导入主GUI函数.m文件。它试图通过将原始函数中的数字返回到主gui来做到这一点:

标签界面:

function tabbedUI = tab_gui1()
... Code for tabbed UI
end

玩GUI:

function test_embeddedGUI()

    hFig = figure('Menubar', 'none');
    test = tab_gui1(hFig);

    uicontrol('Style', 'pushbutton', 'String', 'This is a simple test', 'Callback', @testButton);

    function testButton(src, evt)

        disp('button was pressed');
    end
end

我的问题是,当我创建'子图'时,它会创建一个新的图形窗口,而不会将其嵌入到主GUI图中。

如何创建可嵌入另一个图形中的图形?

matlab matlab-figure matlab-guide
1个回答
4
投票

而不是创建一个新的新数字,而是传递您想要嵌入代码的父对象。例如,(假设您使用了链接问题'接受的答案的代码):

function tab_gui1(parent)
    hTabGroup = uitabgroup('Parent', parent); % parent here is the main GUI figure.
    hTabs(1) = uitab('Parent', hTabGroup, 'Title', 'Data');
    hTabs(2) = uitab('Parent', hTabGroup, 'Title', 'Params');
    hTabs(3) = uitab('Parent', hTabGroup, 'Title', 'Plot');
    set(hTabGroup, 'SelectedTab', hTabs(1));

... Rest of Code is the same

end

然后将父对象传递给子GUI函数:

function test_embeddedGUI()
    hFig = figure('Menubar', 'none');
    tab_gui1(hFig);  % your parent object being passed is the main figure.

    uicontrol('Style', 'pushbutton', 'String', 'This is a simple test', 'Callback', @testButton);
    function testButton(src, evt)
        disp('button was pressed');
    end
end

但是,通过这种特殊安排,您可以获得可以/将重叠的元素:

请注意,按钮是重叠的。从我可以从您的问题中收集到的内容,您似乎希望为每个选项卡提供一个带有子接口的表格主界面。我建议在主GUI上创建选项卡式界面,然后为每个选项卡创建一个uipanel。然后,您将使用单独的函数填充这些uipanel。这是一个简单的例子:

主UI

function test_embeddedGUI()
    hFig = figure('Menubar', 'none');

    hTabGroup = uitabgroup('Parent', hFig);

    hTabs(1) = uitab('Parent', hTabGroup, 'Title', 'First');
    hTabs(2) = uitab('Parent', hTabGroup, 'Title', 'Second');
    hTabs(3) = uitab('Parent', hTabGroup, 'Title', 'Third');

    set(hTabGroup, 'SelectedTab', hTabs(1));

    firstPanel = uipanel('Title', 'Main Panel', 'Parent', hTabs(1));
    secondPanel = uipanel('Title', 'Secondary Panel', 'Parent', hTabs(2));
    thirdPanel = uipanel('Title', 'Final Panel', 'Parent', hTabs(3));

    subUI1(firstPanel);
end

SubUI:

function subUI1(parent)
    firstButton = uicontrol('Style', 'pushbutton', 'String', 'First Button' ...
        , 'Parent', parent, 'Callback', @buttonPress);

    function buttonPress(src, evt)
        disp('Main Button press');
    end

end

这将创建一个这样的界面:

© www.soinside.com 2019 - 2024. All rights reserved.