我正在使用上一篇文章中的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的图中。
如何创建可以嵌入另一个图中的图形?
答案 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
然而,通过这种特殊的安排,你会得到可以/将会重叠的元素:
请注意按钮重叠。从我可以从您的问题中收集到的内容,您似乎希望为每个选项卡提供一个带有子接口的表格主界面。我建议在主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
这将创建一个这样的界面: