wxpython sizers - WX.EXPAND 对间隔符有影响吗?

wxpython sizers - does WX.EXPAND make a difference in spacers?

遵循 BoxSizer from the ground Up 教程中的好建议,我正在重构代码以将 wx.LEFT/RIGHT/TOP/BOTTOM 标志分解为 "spacers" - 所以:

horizontal_sizer.Add(someControl, 0, wx.LEFT, border)

变为:

horizontal_sizer.Add((border, 0))
horizontal_sizer.Add(someControl)

对于上面的例子,我确信它们是完全等价的。但是,如果 wx.EXPAND 和非零比例指定为:

horizontal_sizer.Add(someControl, proportion, wx.LEFT | wx.EXPAND, border)

下面是这个吗:

horizontal_sizer.Add((border, 0))
horizontal_sizer.Add(someControl, proportion, wx.EXPAND)

完全等同于上面的?从视觉上看,它们看起来确实是一样的,但我有什么遗漏的吗?换句话说,wx.EXPAND 是否影响边界,如果是,如何影响?

当然上面的例子是微不足道的,但是在复杂的 sizer 布局中,上面的转换(如教程中所建议的)大大简化了代码并使常见的 UI 模式脱颖而出,这些模式在混乱中是不可读的或标志和数字。

编辑:欢迎提供有关添加垫片的正确方法的反馈。例如我看到 here:

mainSizer.Add(wx.StaticText(self), 0, wx.EXPAND)  # add a "spacer"

或者在我维护的代码中,人们这样做:

horizontal_sizer.Add((0, 0), 1) # which seems equivalent to Add((0, 0))

现在 python 应该有一个——最好只有一个——显而易见的方法——这里至少有 4 个——所以一些专家反馈表示赞赏。

是的,比例值和 wx.EXPAND 标志与小部件一样应用于间隔符。该项目的最小尺寸应该是它在添加间隔时给出的尺寸,(而不是像往常一样是小部件的 属性。)您可以使用可扩展的尺寸轻松实现一些很好的调整布局。

使用 wx.StaticText 作为间隔物可行,但对我来说似乎很浪费,因为那里不需要小部件,除非你需要用它做一些特殊的事情,比如稍后设置标签或类似的东西。不过我绝对不会称它为 spacer,它是一个此时恰好是空白的小部件。

一些不止一种方法来自于 C++ API 随着时间的推移的轻微演变,并希望保持向后兼容性,以及包装器的一些 pythonization .然而,它不像以前那么混乱了,好消息是它在 Phoenix 文档中有详细的记录。那里记录的内容应该与 Classic 兼容,并将在未来继续与 Phoenix 合作。

https://wxpython.org/Phoenix/docs/html/wx.Sizer.html

顺便说一句,您没有提到便捷方法 AddSpacerAddStretchSpacer,因此请在列表中添加另一种方法。 ;-) 它们确实有助于消除歧义,所以这是一个很好的补充。