wxpython size -做WX.EXPAND在分隔符中起作用



根据BoxSizer从头到尾教程中的建议,我正在重构代码以提出wx。LEFT/RIGHT/TOP/BOTTOM标记为"spacers" - so:

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是否影响边界,如果是,如何影响?

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

EDIT:关于添加间隔符的正确方法的反馈将不胜感激。例如我在这里看到:

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作为间隔符工作,但对我来说似乎是浪费,因为没有必要在那里有一个小部件,除非你需要用它做一些特别的事情,比如在以后的时间设置标签或类似的东西。但我绝对不会把它称为间隔符,它是一个小部件,恰好现在是空白的。

这样做的一些不止单向的原因是c++ API随着时间的推移发生了轻微的演变,并且希望保持向后兼容性,同时也对包装器进行了一些python化。然而,它不像以前那么混乱了,好消息是它在Phoenix文档中有很好的记录。这里的文档应该与Classic兼容,并将在未来继续与Phoenix一起工作。

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

顺便说一句,你没有提到AddSpacerAddStretchSpacer的方便方法,所以添加另一种方法来实现它的列表。-)它们确实有助于消除歧义,所以这是一个很好的补充。

最新更新