在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个 - 所以一些专家反馈意见。
答案 0 :(得分:1)
是的,比例值和wx.EXPAND
标志应用于与小部件相同的垫片。项目的minsize应该是添加spacer时给出的大小(而不是像往常那样是小部件的属性。)你可以使用可扩展的sizer轻松实现一些很好的大小调整布局。
使用wx.StaticText
作为间隔工作,但似乎浪费我,因为不需要在那里有一个小部件,除非你需要做一些特殊的事情,比如在以后设置标签或某事像那样。我绝对不会把它称为间隔,但它是一个恰好空白的小部件。
一些超过单向的方法来自于C ++ API随着时间的推移而略微发展,并希望保持向后兼容性,以及对包装器的一些python化。然而,它比一段时间内没有那么混乱,而且好消息是它在凤凰文档中有很好的记录。记录的内容应与Classic兼容,并将继续与Phoenix合作。
https://wxpython.org/Phoenix/docs/html/wx.Sizer.html
顺便说一下,你没有提到方便方法AddSpacer
和AddStretchSpacer
,所以添加另一种方法来做到这一点。 ;-)他们确实帮助消除歧义,所以这是一个很好的补充。