如何在wxTreeCtrl
中选择项目?我将方法绑定到激活的项目,如下所示:
self.tree.Bind (wx.EVT_TREE_ITEM_ACTIVATED, self.OnAdd, id=10)
在方法OnAdd
中,我尝试获取该项目:
def OnAdd(self, event):
item = event.GetItem()
但它给出了事件没有GetItem()
方法的错误。有什么想法吗?
更新
我已经指定了一个按钮事件来处理所选项目。 所以这就是事件没有附加项目的原因..
答案 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寻找相同的解决方案两天。
我找到了一个非常好的工作示例:
我将代码块与wxSmith(RAD工具)一起使用。 Ubuntu仿生
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 !
}