在wx.ListCtrl中使用任意wx对象作为列

6 投票
1 回答
4204 浏览
提问于 2025-04-16 14:46

我有一个 wx.ListCtrl,它设置了 wx.LC_REPORT 这个选项,里面有三列。我想在第一列里为每一项添加一个复选框。我试过使用 ListCtrl.InsertItem 方法,但这个方法只接受一个参数(info),我找不到关于这个参数需要是什么的文档。我尝试直接把 wx.CheckBox 传给 InsertItem,但没有成功。

在 wxPython 的 ListCtrl 中可以有复选框作为条目吗?如果可以,我该怎么做呢?

为了让你更清楚我在说什么,这里有一张我想要的图片(不确定这是不是 wx,但我就是想要这个效果)。我想要在编号列的 1 到 5 旁边有复选框。

带复选框的列表控件

1 个回答

10

看看这个 wx.lib.mixins.listctrl

import wx
import wx.lib.mixins.listctrl as listmix

class TestListCtrl(wx.ListCtrl, listmix.CheckListCtrlMixin, listmix.ListCtrlAutoWidthMixin):
    def __init__(self, *args, **kwargs):
        wx.ListCtrl.__init__(self, *args, **kwargs)
        listmix.CheckListCtrlMixin.__init__(self)
        listmix.ListCtrlAutoWidthMixin.__init__(self)
        self.setResizeColumn(3)

    def OnCheckItem(self, index, flag):
        print(index, flag)

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = wx.Panel(self)
        self.list = TestListCtrl(self.panel, style=wx.LC_REPORT)
        self.list.InsertColumn(0, "No.")
        self.list.InsertColumn(1, "Progress")
        self.list.InsertColumn(2, "Description")
        self.list.Arrange()
        for i in range(1, 6):
            self.list.Append([str(i), "", "It's the %d item" % (i)])        
        self.button = wx.Button(self.panel, label="Test")
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.list, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
        self.sizer.Add(self.button, flag=wx.EXPAND | wx.ALL, border=5)
        self.panel.SetSizerAndFit(self.sizer)
        self.Show()

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

撰写回答