我有几个GUI,我想将它组合成一个“主”GUI,我可以在不同的选项卡中选择所有的GUI。有没有办法做到这一点,而无需从头开始构建GUI?
只是说清楚:
GUI 1数据加载
GUI 2数据预处理
GUI 3数据分析
主GUI =应该有3个选项卡,具有相同的布局等,就像现有的GUI
更新: 我尝试了GUI Layout Toolbox,可以用来创建标签。但是,我现在如何将现有的GUI包含在每个标签中?
f = figure();
p = uiextras.TabPanel();
uicontrol( 'Parent', p);
uicontrol( 'Parent', p);
uicontrol( 'Parent', p);
p.TabNames = {'Data Loading', 'Data Preprocessing', 'Data Analysis'};
p.TabSize = 100;
更新2: 还有其他选项可以组合多个GUI吗?
答案 0 :(得分:3)
guidata
和父图的属性(组合后只有一个),那么如果不重新处理所有GUI,这很快就会变得不可能或至少变得混乱。
另一种可能性是将数字停靠在一个桌面组中。 这样,每个GUI都将保持隔离状态,并且不需要对其实现进行更改。 参见例如
http://www.mathworks.nl/matlabcentral/fileexchange/18106-manage-and-dock-figures-into-group
有关如何将数字停靠到一个桌面组的示例。
修改强>
一个快速而又肮脏的例子:
function dockTest()
GROUPNAME = 'MyGUIs';
desktop = com.mathworks.mde.desk.MLDesktop.getInstance();
group = desktop.addGroup(GROUPNAME);
desktop.showGroup(GROUPNAME,1);
% create some dummy-figures:
for i=1:2
figureList(i) = figure('name', ['GUI ', num2str(i)],...
'numbertitle','off');
end
% dock figures in list:
for i=1:numel(figureList)
f = figureList(i);
jf = get(handle(f), 'JavaFrame');
jf.setGroupName(GROUPNAME);
set(f, 'WindowStyle', 'docked');
end
end
你应该能够简单地使figureList
(也许GROUPNAME
)成为这个函数的一个参数,从而将你想要停靠的所有数字句柄传递给一个组。
您不需要工具箱。
我想我应该注意到这一切都是基于未记录的功能。
我经常通过在所涉及的各个java对象上大量使用methodsview
来解决这类问题。
答案 1 :(得分:2)
尝试使用文件交换中的GUI Layout Toolbox,它允许使用选项卡式GUI,这些GUI在MATLAB中不支持开箱即用。可能会对您现有的GUI进行一些重写,以使它们与用于主GUI的GUI Layout Toolbox一起使用,但希望这应该是最小的。
答案 2 :(得分:2)
合并多个GUI
的一种方法是使用额外的GUI
来操纵其可见性。
GUI
OpeningFcn
中,使用STATE(1) = dataLoading; STATE(2) = dataProcessing; STATE(3) = dataAnalyzing; assignin('base', 'STATE', STATE); %make the first one visible set(STATE(1),'Visible','on'); set(STATE(2),'Visible','off'); set(STATE(3),'Visible','off');
pushbutton_Callback
中,检索STATE
并设置可见性属性STATE = evalin('base', 'STATE'); set(STATE(1),'Visible','off'); set(STATE(3),'Visible','off'); set(STATE(2),'Visible','on');