我一直在探索MATLAB GUI上的一些布局,并想知道是否可以将两个面板放在一起,然后根据一个按钮在一个或另一个之间进行选择。
到目前为止,我使用GUIDE创建了一个GUI。在那里我创建了Panel 1,里面有一个静态文本,说" Panel 1可见"另一个面板2里面有静态文字说"面板2可见"。我还创建了两个按钮,一个仅显示面板1,另一个仅显示面板2
观察: 1)当我将面板放在不同的位置时,按钮按预期工作 2)当我将面板放在彼此的顶部时,或者即使它们部分重叠时,只有面板1的按钮按预期工作。面板2的按钮不显示任何内容(而不是仅显示面板2)
有人可以解释是否有办法让多个面板彼此叠加,然后在运行时间内一次只能查看其中一个面板(使用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'})
由于
答案 0 :(得分:2)
问题在于GUIDE如何设置第二个UIpanel的Parent
属性。当您将面板2拖动到面板1上时,如果面板1突出显示,它将被设置为面板2的父级。面板中子级的可见性由其父面板控制,因此当您关闭面板1的可见性时如果是小孩,它也会关闭小组2。
以下两种解决方法:
在“OpeningFcn”
中添加以下内容set(handles.uipanel2,'Parent',handles.figure1,'Position',get(handles.uipanel1,'Position'));
作为将面板2的父级设置为面板1的工件,面板2的Position
属性相对于面板1,因此您必须将位置向量从面板1复制到面板2。 / p>
或者你可以查看generating your GUIs programmatically,而不必处理GUIDE和这些奇怪的小问题。
答案 1 :(得分:1)
在Matlab中等待更好的GUI设计器时,构建“复杂”接口的另一种方法是使用GUI Layout toolbox(及其CardPanels)。
NB:You can still use GUIDE用于界面的其他部分。