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 自体にそのサイズを教えてもらう方法はありますか? (常に最大に拡張された幅を返します)
編集: 上記で使用する関数を提供していないことをお許しください。しかし、ツリーをたどって、すべてのラベルの幅を取得し、最も広いラベルの合計幅を返します (インデントを考慮して)。