在ListCtrl(或ObjectListView)中进行自动换行

1 投票
2 回答
1714 浏览
提问于 2025-04-16 10:14

我有一个 wxListCtrl(其实是一个 ObjectListView),它的显示方式是 LC_REPORT,并且有两列。

当第一列的文字到达列的边缘时,能否让文字自动换行?

2 个回答

0

wxListCtrl的功能比较有限。如果你想做一些比基本功能更复杂的事情,建议你考虑“升级”到wxGrid,因为它有很多强大的功能。

2

使用ObjectListView是无法实现的(可以查看他们的常见问题解答),因为ListCtrl不支持多行输入。

不过,使用UltimateListCtrl是可以做到的。

import wx
from wx.lib.wordwrap import wordwrap
import wx.lib.agw.ultimatelistctrl as ULC   

class Frame(wx.Frame):
    def __init__(self, *args, **kw):
        wx.Frame.__init__(self, *args, **kw)

        self.list = ULC.UltimateListCtrl(self, agwStyle=ULC.ULC_REPORT|ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
        items = ['A', 'b', 'a really really long line that if would be nice if it could word-wrap']
        colWidth = 100
        self.list.InsertColumn(0, "AA", width=colWidth)
        for item in items:
            item = wordwrap(item, colWidth, wx.ClientDC(self))
            self.list.InsertStringItem(0, item)

app = wx.App(False)
frm = Frame(None, title="ULC wordwrap test")
frm.Show()
app.MainLoop()

撰写回答