wxPython UltimateListCtrl程序matically勾选列表项

1 投票
1 回答
1015 浏览
提问于 2025-04-18 11:33

我正在使用 UltimateListCtrl,它的样式是 LC_LIST。我在列表中放了所有的项目,并且每个项目都有复选框。在填充完列表后,我想根据从数据库收到的数据动态地勾选一些项目。但是在列表填充后,我却无法勾选任何项目。

这里我粘贴了一些示例代码来说明这个问题。

更多信息:我在 Windows XP 平台上使用 Python 2.7 和 wxPython 2.8。

import random
import wx
import wx.lib.agw.ultimatelistctrl as ULC

class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, parent=None, title="Tick List Item Checkbox Programatically")
        self.panel = wx.Panel(parent=self)
        self.sizer = wx.BoxSizer(orient=wx.VERTICAL)
        self.panel.SetSizer(self.sizer)

        self.list = ULC.UltimateListCtrl(parent=self.panel, agwStyle=wx.LC_LIST)
        self.sizer.Add(item=self.list, proportion=1, flag=wx.EXPAND)

        for i in range(50):
            label = "Item %02d " % (i + 1) + "random " * random.randint(1, 3)
            self.list.InsertStringItem(index=i, label=label, it_kind=1)

        self.checkItems()

        self.Show()


    def checkItems(self):
        idx = [1, 3, 6, 7, 9, 11, 15, 17, 20]
        for i in idx:
            # self.list.SetItemState(item=i, state=ULC.ULC_STATE_SELECTED, stateMask=ULC.ULC_MASK_CHECK)
            # self.list.SetItemState(item=i, state=ULC.ULC_STATE_SELECTED, stateMask=ULC.ULC_MASK_STATE)
            self.list.SetItemState(item=i, state=ULC.ULC_STATE_SELECTED, stateMask=ULC.ULC_STATE_SELECTED)


if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

我该如何勾选列表中的项目呢?

1 个回答

2

你需要从列表中取出一个项目,检查一下,然后再把它保存回列表里:

def checkItems(self):
    idx = [1, 3, 6, 7, 9, 11, 15, 17, 20]
    for i in idx:
        temp = self.list.GetItem(i, 0)
        temp.Check(True)
        self.list.SetItem(temp)

撰写回答