【问题标题】:Updating treectrl in wxPython在 wxPython 中更新 treectrl
【发布时间】:2023-03-31 02:30:01
【问题描述】:

如何在 treectrl 显示后更改或添加项目。 我创建了一个简单的示例,如何在 init 之后添加额外的项目(例如香蕉)。 在 init 退出之前更改它是可行的,但我希望能够在它已经显示后更新 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()

【问题讨论】:

    标签: python wxpython treecontrol


    【解决方案1】:

    我添加了一个按钮。如果单击该按钮,Banana(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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多