从wxtreeCtrl获取选定项
你应该怎么获取在 wxTreeCtrl
中选中的项目呢?我把方法绑定到激活的项目上,像这样:
self.tree.Bind (wx.EVT_TREE_ITEM_ACTIVATED, self.OnAdd, id=10)
然后在 OnAdd
方法中,我试着获取这个项目:
def OnAdd(self, event):
item = event.GetItem()
但是它报错说事件没有 GetItem()
这个方法。有什么想法吗?
更新:
我给一个按钮事件分配了处理选中项目的功能。所以这就是为什么事件没有附带项目的原因……
2 个回答
0
我来分享一下我的看法:
我花了两天时间在找C++/wxWidgets的解决方案。
我找到一个非常好用的例子:
我在Ubuntu Bionic上使用Codeblocks和wxSmith(一个快速开发工具)。
从Windows远程连接,并设置显示,然后打开Codeblocks。
下面是这个特定事件的代码...
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 !
}
0
你绑定回调函数的方式不对。你现在是这样做的:
self.Bind (wx.EVT_TREE_ITEM_ACTIVATED, self.OnAdd, id=10)
但是第三个参数应该是 source
,而 id
是第四个参数。所以,改成这样:
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)
这样的话,你在 OnAdd
函数中得到的 event
参数将是 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()