2013-08-05 19 views
0

如何在treectrl顯示後修改或添加項目。 我已經創建了一個簡單的例子,我將如何在初始化後添加一個額外的項目(例如香蕉)。 改變之前初始化退出的作品,但我希望能夠更新TREECTRL它已經被顯示後:在wxPython中更新treectrl

import wx 

class TreeFrame(wx.Frame): 

    def __init__(self): 

     wx.Frame.__init__(self, None, title='TreeCtrl') 

     tree_ctrl = wx.TreeCtrl(self, -1, style=wx.TR_DEFAULT_STYLE | \ 
              wx.TR_FULL_ROW_HIGHLIGHT | \ 
              wx.TR_EDIT_LABELS) 

     # Add the tree root 
     root = tree_ctrl.AddRoot('Food') 
     tree_ctrl.AppendItem(root,'Fruit (3)') 
     tree_ctrl.AppendItem(tree_ctrl.GetLastChild(root),'Apple (1)') 
     tree_ctrl.AppendItem(tree_ctrl.GetLastChild(root),'Orange (2)') 

     tree_ctrl.ExpandAll() 
     self.Centre() 

    # So how can I change the treectrl above after _init_ . 
    # E.g. Add bananas 

    print 'do something' 



if __name__ == '__main__': 
    app = wx.App(0) 
    frame = TreeFrame() 
    frame.Show() 
    app.MainLoop() 

回答

0

我增加了一個按鈕。如果您單擊該按鈕,香蕉(3)將被追加到樹上。詳情請參閱評論(特別是NOTE:

import wx 

class TreeFrame(wx.Frame): 

    def __init__(self): 

     wx.Frame.__init__(self, None, title='TreeCtrl') 
     tree_ctrl = wx.TreeCtrl(self, -1, style=wx.TR_DEFAULT_STYLE | \ 
           wx.TR_FULL_ROW_HIGHLIGHT | \ 
           wx.TR_EDIT_LABELS) 

     # NOTE: Bind callback which will be called when the button is clicked. 
     button = wx.Button(self, -1, label='Add banana') 
     button.Bind(wx.EVT_BUTTON, self.add_banana) 

     # NOTE sizer 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(tree_ctrl, 1, wx.EXPAND|wx.ALL) 
     sizer.Add(button, 0, wx.EXPAND|wx.ALL) 
     self.SetSizer(sizer) 


     # Add the tree root 
     root = tree_ctrl.AddRoot('Food') 
     tree_ctrl.AppendItem(root,'Fruit (3)') 
     tree_ctrl.AppendItem(tree_ctrl.GetLastChild(root),'Apple (1)') 
     tree_ctrl.AppendItem(tree_ctrl.GetLastChild(root),'Orange (2)') 

     tree_ctrl.ExpandAll() 
     self.Centre() 

     # NOTE: Save tree_ctrl, root as attribute 
     #  to make them available in add_banana method. 
     self.tree_ctrl = tree_ctrl 
     self.root = root 

    # called when the button is clicked. 
    def add_banana(self, evt): 
     self.tree_ctrl.AppendItem(self.tree_ctrl.GetLastChild(self.root), 'Banana (3)') 


if __name__ == '__main__': 
    app = wx.App(0) 
    frame = TreeFrame() 
    frame.Show() 
    app.MainLoop()