在Erlang中:如何在面板中扩展wxNotebook?

8 投票
1 回答
1426 浏览
提问于 2025-04-15 13:19

(我把这个问题标记为Python,因为我懂Python代码,所以Python的例子也欢迎!)

我想在wxWidgets里创建一个简单的窗口:
我创建一个主面板,然后把它添加到一个表单里。
我给主面板关联一个盒子布局(把它水平分成两部分)。
我把左侧面板添加到这个盒子布局里,
然后把右侧面板也添加到这个盒子布局里,
接着我创建一个新的盒子布局(竖直的),
再创建另一个盒子布局(水平的)。
我创建一个笔记本控件,
然后创建一个面板,把它放进笔记本里(添加页面)。
我把笔记本添加到新的竖直盒子布局里,
再把这个竖直布局放进水平布局里。
我把水平布局关联到右侧面板,
最后把左侧和右侧面板都添加到主布局里。

但是这样做不行……

也许我漏掉了什么(对布局的理解有点障碍),但我想要做的是在不使用竖直布局的情况下,让笔记本控件扩展到右侧面板的剩余区域(反正这样也不行)。

所以我的问题是:假设我想让右侧面板里的笔记本控件扩展到表单的右侧剩余区域,我该怎么做呢?

对于懂Erlang的人来说,这就是我目前的进展:

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

我会尽快关闭这个问题,因为我已经弄明白我需要做什么了。

简单来说,我把添加命令的比例改成了1,这样就能把整个面板扩展开了。

新的代码:

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

撰写回答