0

私はツリー ctrl を作成しており、ダブルクリックがどこから来たのかを把握する必要があります。

コード:

def _initElementsOfTreePanel(self, panel):
    tree = wx.TreeCtrl(panel, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER | wx.TR_DEFAULT_STYLE)

    root = tree.AddRoot("Elements")
    items = []
    imglist = wx.ImageList(16, 16, True, 2)
    imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16, 16)))
    imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16, 16)))
    tree.AssignImageList(imglist)

# #        Create the element Tree (the left hand side panel). Places in it all the found functions 
    def appendSubitems(item, func_list, tree):
        print item
        for func in func_list:
            itemid = tree.AppendItem(item, func.__name__, 1)
            print"GUIFrame._initElementsofTreePanel, func:",func.__name__,"id:",itemid

#        print "TreeItemId:",
    appendSubitems(tree.AppendItem(root, "Input functions", 0), self._elemdisco.input_functions, tree) 
    appendSubitems(tree.AppendItem(root, "Processing functions", 0), self._elemdisco.processing_functions, tree)
    appendSubitems(tree.AppendItem(root, "Output functions", 0), self._elemdisco.output_functions, tree)
    appendSubitems(tree.AppendItem(root, "Other functions", 0), self._elemdisco.other_functions, tree)


    tree.ExpandAll()
    self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self._addNodeToSchema, self.treePanel.tree)

def _addNodeToSchema(self,event):
    print event.GetItem()

出力は、どのノードをダブルクリックしても、同じアイテムがイベントを発生させたと認識していることを示しています。そして、それは私が追加したことがわかっているアイテムの ID には対応せず、ルートの ID にも対応しません。

ツリー内のオブジェクトへの参照を取得する方法を知っている人はいますか? 基本的にその名前を取得したいのですが、この API では許可されません :P

[編集]:ソルバーですが、これはフレームワークのバグだと思います。ダブルクリックが実際に発生した場所に関係なく、イベントが同じ TreeItemID を返す必要がある理由はありません。

4

2 に答える 2

1
def _addNodeToSchema(self,event):
    pt = event.GetPoint()
    item, _ = self.treePanel.tree.HitTest(pt)
    if item:        
        print self.treePanel.tree.GetItemText(item) #this is the label of the node

どうやら、ポイント位置を取得し、その位置で見つけることができる要素についてツリーに問い合わせる必要があります:) あまりオブジェクト指向ではありませんが、私はそれを取ります。

于 2013-04-03T20:07:04.477 に答える