为什么wxGlade强制执行sizer作为wx.Frame的第一个子节点?

时间:2013-05-20 10:55:20

标签: python wxpython wxglade

我注意到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

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

1 个答案:

答案 0 :(得分: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

使用框架的另一个方便的原因 - > sizer - >面板是它使开关面板更容易,你可以隐藏面板和显示另一个面板。有关详细信息,请参阅此tutorial