2009-08-02 10 views
8

(Ich habe diese Frage auch als Python markiert, da ich Python-Code verstehe, also sind auch Beispiele in Python willkommen!).In erlang: Wie erweitere ich wxNotebook in einem Panel?

Ich mag ein einfaches Fenster in wxWidgets erstellen:
ich eine Hauptplatte, die mich zu einem Formular hinzufügen
verbinde ich eine boxsizer zum Hauptfeld (es in zwei aufgeteilt, horizontal).
mich hinzufügen LeftPanel zum boxsizer,
ich RightPanel zum boxsizer hinzufügen,
ich einen neuen boxsizer (vertikal)
erstellen erstelle mir eine andere boxsizer (horizontal)
ich einen Notebook-Widget erstellen
ich ein Panel erstellen und legt es in dem Notebook (addPage)
I das Notebook an den neuen boxsizer hinzuzufügen (vertikaler)
I die vertikalen Sizer in den horizontalen einem
hinzufügen I assoziieren die horizontalen Sizer zum RightPanel
Ich füge das linke und rechte Panel dem Hauptsizer hinzu.

Das funktioniert nicht ...

Vielleicht habe ich etwas verpasst (mentale Blockade über Sizer), aber was würde ich wie zu tun ist, um das Notebook-Widget ohne die Verwendung des vertikalen Sizer zu erweitern in der horizontalen (es funktioniert sowieso nicht).

Also meine Frage ist. Angenommen, ich möchte das Notizbuchwidget in RightPanel erweitern, um den Rest des rechten Seitenbereichs des Formulars zu übernehmen. Wie würde ich das machen?

Für diejenigen, die Erlang verstehen, das ist, was ich bisher habe:

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), 
    ... 

Antwort

4

ich schließe diese Frage (so schnell wie ich kann), nachdem ich herausgefunden, was ich tun musste.

Grundsätzlich änderte ich den Anteil auf 1 des Add-Befehls an das Hauptfeld (dies wird das Ganze erweitern)

Neuer Code:

%% 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}]), 
Verwandte Themen