如何在MatLab中创建带有选项卡的图形用户界面?

7

我希望创建一个选项卡式的GUI,第一个选项卡用于读取输入,然后将输入显示在GUI上。用户应该能够从GUI中选择数据,然后作为算法的输入。另外,用户可以在另一个选项卡中选择算法的参数。在第三个选项卡中,用户可以看到生成的图表。

我如何在MatLab中通过编程或使用GUIDE来创建选项卡式GUI?


2
https://dev59.com/DWHVa4cB1Zd3GeqPru9t - High Performance Mark
2个回答

14

这里有一个简单的例子,使用半文档化的函数UITAB来创建选项卡:

function tabbedGUI()
    %# create tabbed GUI
    hFig = figure('Menubar','none');
    s = warning('off', 'MATLAB:uitabgroup:OldVersion');
    hTabGroup = uitabgroup('Parent',hFig);
    warning(s);
    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));

    %# populate tabs with UI components
    uicontrol('Style','pushbutton', 'String','Load data...', ...
        'Parent',hTabs(1), 'Callback',@loadButtonCallback);
    uicontrol('Style','popupmenu', 'String','r|g|b', ...
        'Parent',hTabs(2), 'Callback',@popupCallback);
    hAx = axes('Parent',hTabs(3));
    hLine = plot(NaN, NaN, 'Parent',hAx, 'Color','r');

    %# button callback
    function loadButtonCallback(src,evt)
        %# load data
        [fName,pName] = uigetfile('*.mat', 'Load data');
        if pName == 0, return; end
        data = load(fullfile(pName,fName), '-mat', 'X');

        %# plot
        set(hLine, 'XData',data.X(:,1), 'YData',data.X(:,2));

        %# swithc to plot tab
        set(hTabGroup, 'SelectedTab',hTabs(3));
        drawnow
    end

    %# drop-down menu callback
    function popupCallback(src,evt)
        %# update plot color
        val = get(src,'Value');
        clr = {'r' 'g' 'b'};
        set(hLine, 'Color',clr{val})

        %# swithc to plot tab
        set(hTabGroup, 'SelectedTab',hTabs(3));
        drawnow
    end
end

标签1 标签2 标签3


这太棒了。非常感谢您提供这个例子! - Daniel Peirano

3
您还可以使用我编写的Matlab File Exchange中提供的实用程序,从创建的GUI中创建选项卡。
使用方法相对简单:
1. 创建一个标签设置为Tab?的窗格,其中?是任何字母或数字(例如TabA)。这个主窗格应该保持空白,并确定选项卡组(uitabgroup)的大小和位置。
2. 创建其他标签名称以主窗格名称开头的附加窗格。所有其他控件都应添加到这些窗格中。
3. 在Guide生成的函数xxx_OpeningFcn中添加以下内容:
handles.tabManager = TabManager(hObject);
附加窗格的位置并不重要,但通常情况下,如果它们与主窗格位于同一位置,则更容易编辑GUI。即使这些窗格被覆盖,您也可以通过使用Guide弹出菜单中的“发送到后面”命令来循环浏览窗格并编辑它们。

Tab Group Place holderMain Tab Supplementary TabResulting GUI


嗨,我有一个快速的问题:使用“发送到后面”选项来创建带有GUIDE的选项卡界面是唯一的方法吗?我在考虑未来如果我想要添加一些内容到一个选项卡中,并且我需要在图形编辑器中找到它。这个问题在有许多选项卡的情况下会更加严重。 - Shika93
@Shika93 - 不幸的是,这是我所知道的唯一方法。 - grantnz

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