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

时间:2013-05-21 19:52:30

标签: matlab matlab-figure matlab-guide

我正在使用上一篇文章中的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的图中。

:/

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

1 个答案:

答案 0 :(得分: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

然而,通过这种特殊的安排,你会得到可以/将会重叠的元素:

Overlapping buttons

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

主要用户界面

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

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

Yay!  Something that works!