0

遵循BoxSizer 从头开始​​教程中的良好建议,我正在重构代码以将 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 标志和数字的混乱中是完全不可读的。

编辑:将不胜感激有关添加垫片的正确方法的反馈。例如我在这里看到:

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 种——所以一些专家的反馈表示赞赏。

4

1 回答 1

1

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

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

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

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

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

于 2016-06-28T00:13:57.260 回答