在Erlang中:如何在面板中扩展wxNotebook?
(我把这个问题标记为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}]),