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

チェックボックスをオンにすると、トレースバックが表示されます。「AttributeError:'TreeEvent'オブジェクトには属性'GetSelections'がありません」選択されているボックスを読み取る方法に関する提案は素晴らしいでしょう。

4

1 に答える 1

1

問題のeventオブジェクトにはメソッドがありませんGetSelections。がありGetSelection、そのイベントでどのアイテムが選択されたかがわかります。選択したすべてのアイテムを内部に取得する場合は、名前をItemCheckedに変更custom_treeすると、内部self.custom_treeを呼び出すことができます。self.custom_tree.GetSelections()ItemChecked

将来、あるイベントオブジェクトで使用できるメソッドの種類を知りたい場合はprint(dir(event))、ハンドラーに入れることができます。

カスタムツリーコントロールには、チェックされた項目を取得するメソッドがありません。できることの1つは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 に答える