Matlab界面中选项卡的切换
界面采用matlab/GUIDE设计,若直接采用actxcontrol函数创建TabStrip控件,则不仅要在GUI窗口显示到屏幕之后才能使用actxcontrol函数(可以在OutputFcn函数中使用actxcontrol函数,而不能在OpeningFcn函数中使用),而且,同样不能创建TabStrip控件的回调函数。因此,软件编制过程中用到了选项卡ActiveX控件Microsoft TabStrip Control 6.0(SP4),这样可以方便调用TabStrip控件的回调函数。
GUIDE创建的TabStrip控件,不能直接在属性编辑器中设置大部分属性,而只能在OpeningFcn函数中通过代码设置其属性。
由于各标签页内的GUI对象相互覆盖,如果都放在一个GUI布局区中,设计起来很不方便。解决此问题的办法是:多创建几个GUI,分别在各子GUI的布局区内设计好标签页面内容,以及各GUI对象的回调函数,然后在主GUI的OpeningFcn函数中将其复制进来。
这里有两点要注意:
(1)子界面对象复制到主界面后,虽然回调函数也可以使用,但是由于在主界面中不能调用子界面的handles,因此,子界面对象的回调函数中,不得使用handles。
(2)若子界面内的对象Tag与主界面对象的Tag值冲突,可能会引起调用冲突。因此,将子界面内与主界面内Tag值设置为不同的名称。
- **function main1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to main1 (see VARARGIN)
% Choose default command line output for main1
handles.output = hObject;
%将第2个GUI(优化子功能)内的面板及其子对象复制到主界面中面板的位置
h2=youhua('Visible','off');%打开优化子界面并隐藏
hPal2=copyobj(findobj(h2,'Type','uipanel','Tag','uipanel2'),hObject);%将优化子界面内的面板及其子对象复制过来
set(hPal2,'Position',get(handles.uipanel1,'Position'),'Visible','off');%将复制过来的面板隐藏
handles.hPal2=hPal2;%将复制过来的面板句柄加入handles,便于回调函数调用
global hAxes2;
hAxes2=copyobj(findobj(h2,'Type','axes','Tag','youhua_axes'),hObject);%将优化子界面内的坐标轴复制过来
set(hAxes2,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes2=hAxes2;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hButton2;
hButton2=copyobj(findobj(h2,'Type','uicontrol','Tag','youhua_pushbutton1'),hObject);%将优化子界面内的按钮复制过来
set(hButton2,'Visible','off');%将复制过来的按钮隐藏
handles.hButton2=hButton2;%将复制过来的按钮句柄加入handles,便于回调函数调用
global hListbox2;
hListbox2=copyobj(findobj(h2,'Type','uicontrol','Tag','youhua_listbox1'),hObject);%将优化子界面内的列表框复制过来
set(hListbox2,'Visible','off');%将复制过来的按钮隐藏
handles.hListbox2=hListbox2;%将复制过来的列表框句柄加入handles,便于回调函数调用
global h2_flag;%选项卡点击标志
h2_flag=0;%0表示未点击,1表示已点击
handles.h2_flag=h2_flag;
delete(h2);%删除隐藏的子界面
%将第3个GUI(赋权子功能)内的面板及其子对象复制到主界面中面板的位置
h3=fuquan('Visible','off');%打开赋权子界面并隐藏
hPal3=copyobj(findobj(h3,'Type','uipanel','Tag','uipanel3'),hObject);%将赋权子界面内的面板及其子对象复制过来
set(hPal3,'Position',get(handles.uipanel1,'Position'),'Visible','off');%将复制过来的面板隐藏
handles.hPal3=hPal3;%将复制过来的面板句柄加入handles,便于回调函数调用
global hButton_fuquan;
hButton_fuquan=copyobj(findobj(h3,'Type','uicontrol','Tag','fuquan_pushbutton1'),hObject);%将赋权子界面内的按钮复制过来
set(hButton_fuquan,'Visible','off');%将复制过来的按钮隐藏
handles.hButton_fuquan=hButton_fuquan;%将复制过来的按钮句柄加入handles,便于回调函数调用
global hListbox_fuquan;
hListbox_fuquan=copyobj(findobj(h3,'Type','uicontrol','Tag','fuquan_listbox1'),hObject);%将赋权子界面内的列表框复制过来
set(hListbox_fuquan,'Visible','off');%将复制过来的按钮隐藏
handles.hListbox_fuquan=hListbox_fuquan;%将复制过来的列表框句柄加入handles,便于回调函数调用
global h3_flag;%选项卡点击标志
h3_flag=0;%0表示未点击,1表示已点击
handles.h3_flag=h3_flag;
delete(h3);%删除隐藏的子界面
%将第4个GUI(融合子功能)内的面板及其子对象复制到主界面中面板的位置
h4=ronghe('Visible','off');%打开融合子界面并隐藏
hPal4=copyobj(findobj(h4,'Type','uipanel','Tag','uipanel4'),hObject);%将融合子界面内的面板及其子对象复制过来
set(hPal4,'Position',get(handles.uipanel1,'Position'),'Visible','off');%将复制过来的面板隐藏
handles.hPal4=hPal4;%将复制过来的面板句柄加入handles,便于回调函数调用
global hButton_ronghe;
hButton_ronghe=copyobj(findobj(h4,'Type','uicontrol','Tag','ronghe_pushbutton'),hObject);%将融合子界面内的按钮复制过来
set(hButton_ronghe,'Visible','off');%将复制过来的按钮隐藏
handles.hButton_ronghe=hButton_ronghe;%将复制过来的按钮句柄加入handles,便于回调函数调用
global hListbox_ronghe;
hListbox_ronghe=copyobj(findobj(h4,'Type','uicontrol','Tag','ronghe_listbox'),hObject);%将赋权子界面内的列表框复制过来
set(hListbox_ronghe,'Visible','off');%将复制过来的按钮隐藏
handles.hListbox_ronghe=hListbox_ronghe;%将复制过来的列表框句柄加入handles,便于回调函数调用
global h4_flag;%选项卡点击标志
h4_flag=0;%0表示未点击,1表示已点击
handles.h4_flag=h4_flag;
delete(h4);%删除隐藏的子界面
%将第5个GUI(可信度分析子功能)内的面板及其子对象复制到主界面中面板的位置
h5=kexindu('Visible','off');%打开可信度分析子界面并隐藏
hPal5=copyobj(findobj(h5,'Type','uipanel','Tag','uipanel5'),hObject);%将可信度分析子界面内的面板及其子对象复制过来
set(hPal5,'Position',get(handles.uipanel1,'Position'),'Visible','off');%将复制过来的面板隐藏
handles.hPal5=hPal5;%将复制过来的面板句柄加入handles,便于回调函数调用
global hButton_kexindu;
hButton_kexindu=copyobj(findobj(h5,'Type','uicontrol','Tag','kexindu_pushbutton'),hObject);%将可信度分析子界面内的按钮复制过来
set(hButton_kexindu,'Visible','off');%将复制过来的按钮隐藏
handles.hButton_kexindu=hButton_kexindu;%将复制过来的按钮句柄加入handles,便于回调函数调用
global hListbox_kexindu;
hListbox_kexindu=copyobj(findobj(h5,'Type','uicontrol','Tag','kexindu_listbox'),hObject);%将可信度分析子界面内的列表框复制过来
set(hListbox_kexindu,'Visible','off');%将复制过来的按钮隐藏
handles.hListbox_kexindu=hListbox_kexindu;%将复制过来的列表框句柄加入handles,便于回调函数调用
% global hText_kexindu;
% hText_kexindu=copyobj(findobj(h5,'Type','uicontrol','Tag','kexindu_text'),hObject);%将可信度分析子界面内的文本框复制过来
% set(hText_kexindu,'Visible','off');%将复制过来的文本隐藏
% handles.hText_kexindu=hText_kexindu;%将复制过来的文本框句柄加入handles,便于回调函数调用
global h5_flag;%选项卡点击标志
h5_flag=0;%0表示未点击,1表示已点击
handles.h5_flag=h5_flag;
delete(h5);%删除隐藏的子界面
%将第6个GUI(意见及建议子功能)内的面板及其子对象复制到主界面中面板的位置
h6=zuihou('Visible','off');%打开建议子功能界面并隐藏
hPal6=copyobj(findobj(h6,'Type','uipanel','Tag','uipanel6'),hObject);%将可信度分析子界面内的面板及其子对象复制过来
set(hPal6,'Position',get(handles.uipanel1,'Position'),'Visible','off');%将复制过来的面板隐藏
handles.hPal6=hPal6;%将复制过来的面板句柄加入handles,便于回调函数调用
global hButton_jianyi;
hButton_jianyi=copyobj(findobj(h6,'Type','uicontrol','Tag','jianyi_pushbutton'),hObject);%将可信度分析子界面内的按钮复制过来
set(hButton_jianyi,'Visible','off');%将复制过来的按钮隐藏
handles.hButton_jianyi=hButton_jianyi;%将复制过来的按钮句柄加入handles,便于回调函数调用
global hText_jianyi;
hText_jianyi=copyobj(findobj(h6,'Type','uicontrol','Tag','jianyi_text'),hObject);%将可信度分析子界面内的文本框复制过来
set(hText_jianyi,'Visible','off');%将复制过来的文本隐藏
handles.hText_jianyi=hText_jianyi;%将复制过来的文本框句柄加入handles,便于回调函数调用
global hAxes_yijian1;
hAxes_yijian1=copyobj(findobj(h6,'Type','axes','Tag','yijian1_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian1,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian1=hAxes_yijian1;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian2;
hAxes_yijian2=copyobj(findobj(h6,'Type','axes','Tag','yijian2_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian2,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian2=hAxes_yijian2;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian3;
hAxes_yijian3=copyobj(findobj(h6,'Type','axes','Tag','yijian3_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian3,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian3=hAxes_yijian3;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian4;
hAxes_yijian4=copyobj(findobj(h6,'Type','axes','Tag','yijian4_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian4,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian4=hAxes_yijian4;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian5;
hAxes_yijian5=copyobj(findobj(h6,'Type','axes','Tag','yijian5_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian5,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian5=hAxes_yijian5;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian6;
hAxes_yijian6=copyobj(findobj(h6,'Type','axes','Tag','yijian6_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian6,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian6=hAxes_yijian6;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian7;
hAxes_yijian7=copyobj(findobj(h6,'Type','axes','Tag','yijian7_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian7,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian7=hAxes_yijian7;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian8;
hAxes_yijian8=copyobj(findobj(h6,'Type','axes','Tag','yijian8_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian8,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian8=hAxes_yijian8;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian9;
hAxes_yijian9=copyobj(findobj(h6,'Type','axes','Tag','yijian9_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian9,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian9=hAxes_yijian9;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian10;
hAxes_yijian10=copyobj(findobj(h6,'Type','axes','Tag','yijian10_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian10,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian10=hAxes_yijian10;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian11;
hAxes_yijian11=copyobj(findobj(h6,'Type','axes','Tag','yijian11_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian11,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian11=hAxes_yijian11;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global hAxes_yijian12;
hAxes_yijian12=copyobj(findobj(h6,'Type','axes','Tag','yijian12_axes'),hObject);%将子界面内的坐标轴复制过来
set(hAxes_yijian12,'Visible','off');%将复制过来的按钮隐藏
handles.hAxes_yijian12=hAxes_yijian12;%将复制过来的坐标轴句柄加入handles,便于回调函数调用
global h6_flag;%选项卡点击标志
h6_flag=0;%0表示未点击,1表示已点击
handles.h6_flag=h6_flag;
delete(h6);%删除隐藏的子界面
% Update handles structure
guidata(hObject, handles);
**
-------------------