1

我注意到 wxGlade(wxPython 的 gui builder)强制将 sizer 作为 wx.Frame 的第一个子元素,这对我来说似乎很奇怪,因为几乎每本书和教程都建议使用 wx.Panel 作为第一个子元素。

因此,如果我想要一个 wx.Panel 作为我的 gui 的基础(例如,在 Windows 上具有一致的默认背景颜色),我必须去:

wx.Frame -> Sizer (1,1) -> wx.Panel -> Sizer (x,x) -> Content

代替

wx.Frame -> wx.Panel -> Content

出于好奇,有人可以向我解释这个设计决定吗?

4

1 回答 1

1

根据 wxPython 的创建者 Robin Dunn 的说法:

就我个人而言,我最近一直在做 frame-sizer-panel-sizer,因为 frame.Fit() 会让 sizer 计算所需的最小尺寸,而不仅仅是使用面板的当前尺寸。但是,如果您不使用 Fit 或类似工具,并且框架只有一个子框架,那么可能没有任何其他理由需要在框架上使用 sizer,因为框架会自动将面板适应框架的客户区域。- https://groups.google.com/forum/#!searchin/wxpython-users/frame$20sizer$20panel/wxpython-users/nW5NivkfU7M/-1ISbrYvvjYJ

使用 frame -> sizer -> panel 的另一个方便的原因是它使切换面板更容易,因为您可以隐藏一个面板并显示另一个面板。有关更多信息,请参阅本教程

于 2013-05-20T13:33:48.267 回答