从wxtreeCtrl获取所选项目

时间:2011-10-25 13:15:18

标签: python wxpython

如何在wxTreeCtrl中选择项目?我将方法绑定到激活的项目,如下所示:

 self.tree.Bind (wx.EVT_TREE_ITEM_ACTIVATED, self.OnAdd, id=10)

在方法OnAdd中,我尝试获取该项目:

    def OnAdd(self, event):
        item =  event.GetItem()

但它给出了事件没有GetItem()方法的错误。有什么想法吗?

更新

我已经指定了一个按钮事件来处理所选项目。 所以这就是事件没有附加项目的原因..

2 个答案:

答案 0 :(得分:0)

您正在错误地绑定回调。您目前这样做:

self.Bind (wx.EVT_TREE_ITEM_ACTIVATED, self.OnAdd, id=10)

但第3个参数是source; id是第4个参数。所以,改成它:

self.tree = wx.TreeCtrl(self, size=(200,100)) # Or however you defined it
self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnAdd, self.tree, id=10)

这样,您在event函数中获得的OnAdd参数将是tree个实例,它将提供GetItem方法。

完整示例:

import wx

class TreeExample(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title='Tree Example', size=(200, 130))
        self.tree = wx.TreeCtrl(self, size=(200, 100))

        root = self.tree.AddRoot('root')
        for item in ['item1', 'item2', 'item3']:
            self.tree.AppendItem(root, item)
        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivated, self.tree)
        self.tree.Expand(root)

    def OnActivated(self, evt):
        print 'Double clicked on', self.tree.GetItemText(evt.GetItem())

app = wx.PySimpleApp(None)
TreeExample().Show()
app.MainLoop()

答案 1 :(得分:0)

我的2美分:

我一直在使用C ++ / wxWidgets寻找相同的解决方案两天。

我找到了一个非常好的工作示例:

  1. 我将代码块与wxSmith(RAD工具)一起使用。 Ubuntu仿生

  2. Windows中的
  3. Ssh &&导出显示&&代码块

这是此特定事件的代码...

void test12052019Frame::OnTreeCtrl1ItemActivated(wxTreeEvent& event)
{
//TreeCtrl1 is my tree
//when I click on any option of my tree
//it activates a wxMessageBox with the label
//of the option selected...
//just let go your imagination :)
//A youtube video will follow.

wxString thelabel;
wxTreeItemId test3;

test3 = TreeCtrl1->GetSelection();//id of the item selected
thelabel = TreeCtrl1->GetItemText(test3);//extract associated text

wxMessageBox(thelabel); //shazam !


}

Working example on youtube