使用MATLAB GUIDE在面板之间切换

时间:2014-04-16 16:59:17

标签: matlab matlab-guide

我一直在探索MATLAB GUI上的一些布局,并想知道是否可以将两个面板放在一起,然后根据一个按钮在一个或另一个之间进行选择。

到目前为止,我使用GUIDE创建了一个GUI。在那里我创建了Panel 1,里面有一个静态文本,说" Panel 1可见"另一个面板2里面有静态文字说"面板2可见"。我还创建了两个按钮,一个仅显示面板1,另一个仅显示面板2

观察: 1)当我将面板放在不同的位置时,按钮按预期工作enter image description here 2)当我将面板放在彼此的顶部时,或者即使它们部分重叠时,只有面板1的按钮按预期工作。面板2的按钮不显示任何内容(而不是仅显示面板2)enter image description here

有人可以解释是否有办法让多个面板彼此叠加,然后在运行时间内一次只能查看其中一个面板(使用GUIDE)。

GUIDE .m文件如下:

function varargout = PanelTest(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @PanelTest_OpeningFcn, ...
                   'gui_OutputFcn',  @PanelTest_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end


function PanelTest_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);


function varargout = PanelTest_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;


function Panel1_Callback(hObject, eventdata, handles)
set(handles.Panel1Tag,{'visible'},{'on'})
set(handles.Panel2Tag,{'visible'},{'off'})

function Panel2_Callback(hObject, eventdata, handles)
set(handles.Panel1Tag,{'visible'},{'off'})
set(handles.Panel2Tag,{'visible'},{'on'})

由于

2 个答案:

答案 0 :(得分:2)

问题在于GUIDE如何设置第二个UIpanel的Parent属性。当您将面板2拖动到面板1上时,如果面板1突出显示,它将被设置为面板2的父级。面板中子级的可见性由其父面板控制,因此当您关闭面板1的可见性时如果是小孩,它也会关闭小组2。

以下两种解决方法:

  1. 在GUIDE中拖动时,重叠它们以使面板1不突出显示并释放。您可以再次开始拖动面板2,并且应该能够将它进一步放在面板1的顶部。这种方法有效但对我来说似乎很烦人
  2. 在“OpeningFcn”

    中添加以下内容
    set(handles.uipanel2,'Parent',handles.figure1,'Position',get(handles.uipanel1,'Position'));
    

    作为将面板2的父级设置为面板1的工件,面板2的Position属性相对于面板1,因此您必须将位置向量从面板1复制到面板2。 / p>

  3. 或者你可以查看generating your GUIs programmatically,而不必处理GUIDE和这些奇怪的小问题。

答案 1 :(得分:1)

在Matlab中等待更好的GUI设计器时,构建“复杂”接口的另一种方法是使用GUI Layout toolbox(及其CardPanels)。

NB:You can still use GUIDE用于界面的其他部分。

相关问题