1

我正在使用带有复选框的 CustomTreeCtrl,但我不知道如何确定选择了哪些复选框。我查看了http://xoomer.virgilio.it/infinity77/wxPython/Widgets/wx.TreeCtrl.html#GetSelection并将其放在一起:

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()

当我选中一个框时,我得到了 Traceback:“AttributeError:'TreeEvent' 对象没有属性'GetSelections'”关于如何读取哪些框被选中的任何建议都会很棒!

4

1 回答 1

1

有问题的event对象没有GetSelections方法。它确实有一个GetSelection,它将告诉您在该事件中选择了哪个项目。如果您想获取所有选定的项目 inside ItemChecked,请重命名custom_treeself.custom_tree,然后您就可以调用self.custom_tree.GetSelections()inside ItemChecked

如果将来您想知道某些事件对象可以使用哪种方法,您可以放入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()))
于 2012-06-01T21:01:47.133 回答