2014-06-30 22 views
1

我使用UltimateListCtrlLC_LIST樣式。我有列表中的所有項目都帶有複選框。填充列表後,我試圖根據從數據庫接收的數據動態檢查(打勾)一些項目。但是在列表填充後,我無法檢查(打勾)列表中的任何項目。wxPython UltimateListCtrl以編程方式檢查(打勾)listitem

這裏我粘貼示例代碼來描述問題。

更多信息:我在平臺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() 

我該如何檢查(打勾)清單項目?

+0

你要檢查什麼? –

+0

@PadraicCunningham,我想檢查(打勾)與列表中的項目一起顯示的複選框。我目前只能選擇整個項目。 – arvinchhi

回答

1

您需要從列表中獲得該項目,檢查,然後將其保存回列表:

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) 
+0

非常感謝。它工作得很好 – arvinchhi