2013-05-21 105 views
2

我正在開發一個GUI使用UITab和UITabGroup從這個以前的帖子我的MATLAB代碼:如何在MatLab中的圖形中嵌入另一個圖形?

How do I create a tabbed GUI in MatLab?

但是該代碼填充單一功能中的每個標籤的用戶界面。由於我的用戶界面將比這更復雜,我希望使用它自己的函數.m文件爲每個選項卡創建一個圖形,然後將該圖形導入主GUI函數.m文件。它試圖通過從原來的函數返回的身影主界面做到這一點:

標籤式界面:

function tabbedUI = tab_gui1() 
... Code for tabbed UI 
end 

主界面:

function test_embeddedGUI() 

    hFig = figure('Menubar', 'none'); 
    test = tab_gui1(hFig); 

    uicontrol('Style', 'pushbutton', 'String', 'This is a simple test', 'Callback', @testButton); 

    function testButton(src, evt) 

     disp('button was pressed'); 
    end 
end 

我的問題是,當我創建'子圖'時,它會創建一個新的數字窗口,並且不會將其嵌入到主GUI的圖形中。

:/

如何創建一個可以嵌入到另一個圖中的數字?

+1

我不Ť明白爲什麼你想要另一個人物。爲什麼你不重用一個現有的軸對象,或創建一個新的? –

+0

@EitanT這是我認爲需要發生的事情,然而在[聊天出現](http://chat.stackexchange.com/rooms/116/conversation/matlab-tabular-gui)之後,我只需要通過父項圖和填充使用?我仍然不確定如何完全做到這一點,並願意接受所有建議。 – KronoS

+0

@EitanT可能是對的,在Python中你也可以繪製到軸對象,它是圖形對象的一部分,但是是一個正在繪製實際圖形的對象。 –

回答

4

而不是創建一個新的數字,而是傳遞想要嵌入代碼的父對象。例如,(假設你使用的連接問題接受的答案的代碼):

function tab_gui1(parent) 
    hTabGroup = uitabgroup('Parent', parent); % parent here is the main GUI figure. 
    hTabs(1) = uitab('Parent', hTabGroup, 'Title', 'Data'); 
    hTabs(2) = uitab('Parent', hTabGroup, 'Title', 'Params'); 
    hTabs(3) = uitab('Parent', hTabGroup, 'Title', 'Plot'); 
    set(hTabGroup, 'SelectedTab', hTabs(1)); 

... Rest of Code is the same 

end 

然後父對象傳遞給子GUI功能:但是這個特別的安排你的元素

function test_embeddedGUI() 
    hFig = figure('Menubar', 'none'); 
    tab_gui1(hFig); % your parent object being passed is the main figure. 

    uicontrol('Style', 'pushbutton', 'String', 'This is a simple test', 'Callback', @testButton); 
    function testButton(src, evt) 
     disp('button was pressed'); 
    end 
end 

那可以/將重疊:

Overlapping buttons

注意,按鈕是重疊的。從我可以從您的問題中收集的信息看來,您希望每個選項卡都有一個帶有子界面的表格主界面。我建議在主GUI上創建標籤界面,然後爲每個標籤創建一個uipanel。然後,您將使用您的單獨功能填充這些uipanel。這裏有一個簡單的例子:

主UI

function test_embeddedGUI() 
    hFig = figure('Menubar', 'none'); 

    hTabGroup = uitabgroup('Parent', hFig); 

    hTabs(1) = uitab('Parent', hTabGroup, 'Title', 'First'); 
    hTabs(2) = uitab('Parent', hTabGroup, 'Title', 'Second'); 
    hTabs(3) = uitab('Parent', hTabGroup, 'Title', 'Third'); 

    set(hTabGroup, 'SelectedTab', hTabs(1)); 

    firstPanel = uipanel('Title', 'Main Panel', 'Parent', hTabs(1)); 
    secondPanel = uipanel('Title', 'Secondary Panel', 'Parent', hTabs(2)); 
    thirdPanel = uipanel('Title', 'Final Panel', 'Parent', hTabs(3)); 

    subUI1(firstPanel); 
end 

SubUI:

function subUI1(parent) 
    firstButton = uicontrol('Style', 'pushbutton', 'String', 'First Button' ... 
     , 'Parent', parent, 'Callback', @buttonPress); 

    function buttonPress(src, evt) 
     disp('Main Button press'); 
    end 

end 

,這將創造像這樣的接口:

Yay! Something that works!

相關問題