将列宽设置为最大内容或 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
)以使其适合其现有元素。
我尝试设置一个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
)以使其适合其现有元素。