2012-06-01 27 views
1

我正在使用帶有複選框的CustomTreeCtrl,但我無法弄清楚如何確定選中哪個複選框。我看着http://xoomer.virgilio.it/infinity77/wxPython/Widgets/wx.TreeCtrl.html#GetSelection,並把這個在一起:如何從CustomTreeCtrl中獲得複選框選擇

import string 
import os 
import sys 
import wx 
import wx.lib.agw.customtreectrl as CT 

class MyFrame(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent, -1, "CustomTreeCtrl Demo")   

     custom_tree = CT.CustomTreeCtrl(self, agwStyle=wx.TR_DEFAULT_STYLE) 
     root = custom_tree.AddRoot("The Root Item") 

     for y in range(5): 
      last = custom_tree.AppendItem(root, "item %d" % y) 

      for z in range(5): 
       item = custom_tree.AppendItem(last, "item %d" % z, ct_type=1) 

      self.Bind(CT.EVT_TREE_ITEM_CHECKED, self.ItemChecked) 

    def ItemChecked(self, event): 
      print("Somebody checked something") 
      print(event.GetSelections()) 

app = wx.PySimpleApp() 
frame = MyFrame(None) 
app.SetTopWindow(frame) 
frame.Show() 
app.MainLoop() 

當我檢查中,我得到了回溯:「AttributeError的:‘TreeEvent’對象有沒有屬性‘GetSelections’」如何閱讀這些箱子是任何建議選擇將是偉大的!

回答

1

event有問題的對象沒有GetSelections方法。它確實有一個GetSelection,它會告訴你在該事件中選擇了哪個項目。如果您想要獲得ItemChecked中的所有選定項目,請將custom_tree重命名爲self.custom_tree,然後您可以在ItemChecked內撥打self.custom_tree.GetSelections()

如果將來您想知道某種事件對象可以使用哪種方法,則可以將print(dir(event))放入您的處理程序中。

自定義樹控件沒有獲取選中項的方法。有一件事你可以做的是在你的框架中創建一個self.checked_items列表,並將其保留在你的ItemChecked方法中。該列表可以保存項目或項目本身的字符串值。例如,

class MyFrame(wx.Frame): 
    def __init__(self, parent): 
     # .... 
     self.checked_items = [] 
     # .... 

    def ItemChecked(self, event): 
     if event.IsChecked(): 
      self.checked_items.append(event.GetItem()) 
      # or to store the item's text instead, you could do ... 
      # self.checked_items.append(self.custom_tree.GetItemText(event.GetItem())) 
     else: 
      self.checked_items.remove(event.GetItem()) 
      # or ... 
      # self.checked_items.remove(self.custom_tree.GetItemText(event.GetItem())) 
+0

謝謝!這很有幫助。但是,GetSelection方法返回哪個項目被選中,而沒有被選中。你知道是否有類似的方法來查找哪些盒子被檢查? – MooreJD2

+1

沒有辦法做到這一點。當您檢查項目或迭代項目時,我會管理您添加/刪除的列表,並且我們會通過IsChecked找到已檢查的項目。 –