2012-06-01 26 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找到已检查的项目。 –