wxpython sizer - WX.EXPAND在间隔器方面有所作为吗?

时间:2016-06-26 23:39:11

标签: python wxpython sizer

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模式脱颖而出,这在OR'ed标志的混乱中是显而易见的。号。

编辑:对正确添加间隔​​符的方式的反馈将不胜感激。例如,我看到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个 - 所以一些专家反馈意见。

1 个答案:

答案 0 :(得分:1)

是的,比例值和wx.EXPAND标志应用于与小部件相同的垫片。项目的minsize应该是添加spacer时给出的大小(而不是像往常那样是小部件的属性。)你可以使用可扩展的sizer轻松实现一些很好的大小调整布局。

使用wx.StaticText作为间隔工作,但似乎浪费我,因为不需要在那里有一个小部件,除非你需要做一些特殊的事情,比如在以后设置标签或某事像那样。我绝对不会把它称为间隔,但它是一个恰好空白的小部件。

一些超过单向的方法来自于C ++ API随着时间的推移而略微发展,并希望保持向后兼容性,以及对包装器的一些python化。然而,它比一段时间内没有那么混乱,而且好消息是它在凤凰文档中有很好的记录。记录的内容应与Classic兼容,并将继续与Phoenix合作。

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

顺便说一下,你没有提到方便方法AddSpacerAddStretchSpacer,所以添加另一种方法来做到这一点。 ;-)他们确实帮助消除歧义,所以这是一个很好的补充。