【问题标题】:Switching between Panels using MATLAB GUIDE使用 MATLAB GUIDE 在面板之间切换
【发布时间】:2014-04-16 16:59:17
【问题描述】:

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

到目前为止,我所做的是使用 GUIDE 创建了一个 GUI。在那我创建了面板 1,里面有一个静态文本,上面写着“面板 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'})

谢谢

【问题讨论】:

    标签: matlab matlab-guide


    【解决方案1】:

    问题在于 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。

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

    【讨论】:

      【解决方案2】:

      在等待 Matlab 中更好的 GUI 设计器时,另一种构建“复杂”界面的方法是使用 GUI Layout toolbox(在您的情况下是 CardPanels)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-08
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多