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

Raf*_*ler 6 python wxpython listctrl

我有一个wx.ListCtrlwx.LC_REPORT位设置.它有3列.我希望第一列填充每个其他条目的复选框.我尝试使用该ListCtrl.InsertItem方法,但它只需要一个参数(info),我找不到任何关于该参数需要的文档.我已经试过路过一家wx.CheckBoxInsertItem无济于事.

是否可以将复选框作为wxPython ListCtrl中的条目?如果是这样,我将如何做到这一点?

如果对于我正在谈论的内容有任何歧义,这里是我想要的图片(不确定这是否是wx,但它是我正在寻找的).我想要在No.列中的1..5旁边的复选框.

列表控件与复选框

Fen*_*kso 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()
Run Code Online (Sandbox Code Playgroud)

  • 以上是一个很好的例子:D如果在任何时候你需要更多自定义控件添加到listctrl,例如进度条或无线电控件,你还可以看看wxPython演示中的UltimateListCtrl,它能够处理复选框,上面等等;) (2认同)