В erlang: Как развернуть wxNotebook в панели? - PullRequest
8 голосов
/ 02 августа 2009

(Я пометил этот вопрос как Python, так как я понимаю код Python, поэтому примеры в Python также приветствуются!).

Я хочу создать простое окно в wxWidgets:
Я создаю основную панель, которую я добавляю в форму
Я связываю boxsizer с главной панелью (разделив ее пополам по горизонтали).
Я добавляю LeftPanel в ящик,
Я добавляю RightPanel в boxsizer,
Я создаю новый boxsizer (вертикальный)
Я создаю другой boxsizer (горизонтальный)
Я создаю виджет Notebook
Я создаю панель и помещаю ее в блокнот (дополнительная страница)
Я добавляю записную книжку в новый boxsizer (вертикальный)
Я добавляю вертикальный размер в горизонтальный
Я связываю горизонтальный калибратор с правой панелью
Я добавляю левую и правую панели к основному классификатору.

Это не работает ...

Может быть, я что-то упустил (мысленный блок о размерах), но я бы хотел бы сделать, чтобы развернуть виджет ноутбука без использования вертикального разметчика внутри горизонтального (он не работает) в любом случае).

Итак, мой вопрос. Предполагая, что я хочу развернуть виджет «Блокнот» внутри правой панели, чтобы занять оставшуюся часть правой части формы, как бы я это сделал?

Для тех, кто понимает Эрланг, вот что у меня есть:

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

1 Ответ

4 голосов
/ 02 августа 2009

Я закрываю этот вопрос (как только смогу) после того, как выяснил, что мне нужно было сделать.

В основном я изменил пропорцию 1 команды add для главной панели (это расширит все)

Новый код:

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