wx.TreeCtrl 的首选大小似乎是当树完全折叠时所有元素适合的最小大小。是否有一种好的(即跨平台兼容)方法来计算树的宽度并展开所有内容?我目前的解决方案是这样的:
def max_width(self):
dc = wx.ScreenDC()
dc.SetFont(self.GetFont())
widths = []
for item, depth in self.__walk_items():
if item != self.root:
width = dc.GetTextExtent(self.GetItemText(item))[0] + self.GetIndent()*depth
widths.append(width)
return max(widths) + self.GetIndent()
这在 win32 下很好用,但在 linux 下就不行了。有没有办法让 TreeCtrl 本身告诉我它的大小,以便我可以覆盖它报告的大小? (总是返回最大扩展宽度)
编辑:请原谅我没有提供我在上面使用的函数,但你明白了,我正在遍历树,获取每个标签的宽度,并返回最宽标签的总宽度 (考虑缩进)
请您参考如下方法:
我发现 GetBestSize 似乎考虑了折叠的项目。例如,使用演示中的 wxTreeCtrl(使用 Ubuntu 和 wxPython 2.8.7.1),当我更改内部文本字符串的长度时(我的演示版本中的第 74 行)返回值self.tree.GetBestSize() 确实考虑了内部字符串的这个新长度,即使树没有展开。也许您需要调用 SetQuickBestSize(False)?
