将列宽设置为最大内容或 header 宽度 wx.dataview.DataViewListCtrl

Set column width to maximum content or header width for a wx.dataview.DataViewListCtrl

我尝试设置一个wx.dataview.DataViewListCtrl。我有多个包含文本内容的列。第一列的某些条目比选定的默认宽度宽。他们被切断了。我可以手动设置列宽,但我喜欢自动将其设置为最大内容或 header 宽度。有没有一种自动化的方法来做到这一点?如果没有,我该如何计算理想的宽度。我在 Ubuntu Linux。使用的后端是 gtk。使用 wxDataViewListCtrl 的 C++ 答案也有帮助。我可以翻译。

您可以确定列的大小,知道哪个是以编程方式存储在其单元格中的每个文本值的最长大小,并将最宽的值分配给该列宽。

为此,您必须创建一个字体对象:

# Example font:
font = wx.Font(pointSize = 10, family = wx.DEFAULT, style = wx.NORMAL, weight wx.NORMAL, faceName = 'Consolas')

# Get the screen display control and set the font:
dc = wx.ScreenDC()
dc.SetFont(font)

# Gets the width and height of that text with this font:
w,h = dc.GetTextExtent("hello world")

您必须为您在该列的单元格中输入的每个文本计算此值,并记住所有这些值中的最大值。完成 ListView 后,您将已经有了列大小的参考。

您可以将列宽设置为 wxCOL_WIDTH_AUTOSIZE(可能映射到 Python 中的 wx.COL_WIDTH_AUTOSIZE)以使其适合其现有元素。