2009-08-02 9 views
8

(Oznaczyłem to pytanie również jako Python, ponieważ rozumiem kod Pythona, więc również przykłady w Pythonie są mile widziane!).W erlang: Jak mogę rozwinąć wxNotebook w panelu?

Chcę utworzyć prostą okna w wxWidgets:
utworzyć główny panel, który dodaję do postaci
I skojarzyć boxsizer do głównego panelu (dzielenie go na dwie części, w poziomie).
dodam LeftPanel do boxsizer,
dodam RightPanel do boxsizer,
tworzę nową boxsizer (pionowy)
tworzę kolejny boxsizer (poziomo)
utworzyć widget Notebook
tworzę Panelu i umieścić go wewnątrz notebooka (addPage)
dodam notebooka do nowego boxsizer (jeden pionowy)
dodam pionową sizer w poziomym jednym
kojarzy mi poziomą sizer do RightPanel
Dodaję lewy i prawy panel do głównego sizera.

to nie działa ...

Może ja coś przeoczyć (psychiczny blok o klasyfikatory), ale co bym jak do zrobienia jest, aby rozwinąć widget notebooka bez użycia pionowej klasyfikatorze wewnątrz poziomego (i tak nie działa).

Moje pytanie brzmi. Zakładając, że chcę rozwinąć widżet Notatnika wewnątrz prawego panelu, aby zająć resztę prawego obszaru formularza, jak miałbym to zrobić?

Dla tych, którzy rozumieją Erlang, jest to, co mam do tej pory:

mainwindow() -> 
    %% Create new environment 
    X = wx:new(), 

    %% Create the main frame 
    MainFrame = wxFrame:new(X, -1, "Test"), 
    MainPanel = wxPanel:new(MainFrame, [{winid, ?wxID_ANY}]), 
    MainSizer = wxBoxSizer:new(?wxHORIZONTAL), 
    wxWindow:setSizer(MainPanel, MainSizer), 

    %% Left Panel... 
    LeftPanel = wxPanel:new(MainPanel, [{winid, ?wxID_ANY}]), 
    LeftPanelSizer = wxBoxSizer:new(?wxVERTICAL), 
    wxWindow:setSizer(LeftPanel, LeftPanelSizer), 
    wxWindow:setMinSize(LeftPanel, {152, -1}), 

    %% Right Panel 
    RightPanel = wxPanel:new(MainPanel, [{winid, ?wxID_ANY}]), 
    RightPanelVerticalSizer = wxBoxSizer:new(?wxVERTICAL), 
    RightPanelHorizontalSizer = wxBoxSizer:new(?wxHORIZONTAL), 
    wxWindow:setBackgroundColour(RightPanel, {255,0,0}), 

    Notebook = wxNotebook:new(RightPanel, ?wxID_ANY, [{size,{-1,-1}}]), 
    TestPanel1 = wxPanel:new(Notebook, [{size,{-1,-1}},{winid, ?wxID_ANY}]), 
    wxNotebook:addPage(Notebook, TestPanel1, "Testpanel!"), 
    TestPanel2 = wxPanel:new(Notebook, [{size,{-1,-1}},{winid, ?wxID_ANY}]), 
    wxNotebook:addPage(Notebook, TestPanel2, "Testpanel!"), 
    wxSizer:add(RightPanelVerticalSizer, Notebook, [{border,0},{proportion,1}, {flag,?wxEXPAND}]), 
    wxSizer:add(RightPanelHorizontalSizer, RightPanelVerticalSizer, [{proportion,1}, {flag,?wxEXPAND}]), 
    wxWindow:setSizer(RightPanel, RightPanelHorizontalSizer), 

    %% Main Sizer 
    wxSizer:add(MainSizer, LeftPanel, [{border, 2}, {flag,?wxEXPAND bor ?wxALL}]), 
    wxSizer:add(MainSizer, RightPanel, [{border, 2}, {flag,?wxEXPAND bor ?wxTOP bor ?wxRIGHT bor ?wxBOTTOM}]), 

    %% Connect to events 
    wxFrame:connect(MainFrame, close_window), 
    wxWindow:center(MainFrame), 
    wxWindow:show(MainFrame), 
    ... 

Odpowiedz

4

Mam zamykania pytanie (jak tylko mogę) po tym, jak zorientowali się, co muszę zrobić.

Zasadniczo zmieniła proporcji do 1 z polecenia dodać do panelu głównego (ta rozszerzy całość)

Nowy kod:

%% Main Sizer 
    wxSizer:add(MainSizer, LeftPanel, [{proportion,0},{border, 2}, {flag,?wxEXPAND bor ?wxALL}]), 
    wxSizer:add(MainSizer, RightPanel, [{proportion,1},{border, 2}, {flag,?wxEXPAND bor ?wxTOP bor ?wxRIGHT bor ?wxBOTTOM}]),