Skip to main content
 首页 » 编程设计

python之计算 wx.TreeCtrl 完全展开宽度的正确方法是什么

2025年05月04日8tuyile006

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)?