我正在使用上一篇文章中的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图中。
如何创建可嵌入另一个图形中的图形?
而不是创建一个新的新数字,而是传递您想要嵌入代码的父对象。例如,(假设您使用了链接问题'接受的答案的代码):
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
这将创建一个这样的界面: