2

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

如何在 MatLab 中创建选项卡式 GUI?

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

选项卡式界面:

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

主界面:

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 的图形中。

:/

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

4

1 回答 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。这是一个简单的例子:

主界面

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

子界面:

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

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

end

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

耶! 有用的东西!

于 2013-05-21T20:39:52.623 回答