簡體   English   中英

使用MATLAB GUIDE在面板之間切換

[英]Switching between Panels using MATLAB GUIDE

我一直在探索MATLAB GUI上的一些布局,並想知道它是否可以在彼此之上有幾個面板,然后根據一個按鈕在一個或另一個之間進行選擇。

到目前為止我所做的是使用GUIDE創建GUI。 在那里我創建了Panel 1,里面有一個靜態文本,說“Panel 1 visible”,另一個Panel 2里面有一個靜態文本,里面寫着“Panel 2 visible”。 我還創建了兩個按鈕,僅顯示面板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'})

謝謝

問題在於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。

或者,您可以考慮以編程方式生成GUI ,而不必處理GUIDE和這些奇怪的小問題。

在Matlab中等待更好的GUI設計器時,另一種構建“復雜”接口的方法是使用GUI Layout工具箱 (以及它的CardPanels )。

注意: 您仍然可以將GUIDE用於界面的其他部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM