1. 程式人生 > >wxPython中tree控制元件的簡單使用

wxPython中tree控制元件的簡單使用

樹形控制元件的簡單使用

#!/usr/bin/python

#-*- coding:utf8 -*-


import wx

class TreeFrame(wx.Frame):
    def __init__(self, root):
        values = [  '1',
                    ['2', ['2-1', '2-2', ['2-3', ['2-3-1', '2-3-2']]]],
                    ['3', ['3-1', '3-2']],
                    ['4', ['4-1', '4-2', '4-3']],
                    '5'
                 ]
        wx.Frame.__init__(self, root, -1, u"樹形控制元件", size=(400,400))
        self.tree = wx.TreeCtrl(self)
        root = self.tree.AddRoot("root")
        self.AddTreeNodes(root, values)
        self.tree.Expand(root)

        self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, self.tree)
        self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollpased, self.tree)
        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, self.tree)


    def AddTreeNodes(self, root, values):
        for node in values:
            if type(node) == str:
                self.tree.AppendItem(root, node)
            else:
                item = self.tree.AppendItem(root, node[0])
                self.AddTreeNodes(item, node[1])

    def OnItemExpanded(self,event):
        print "OnItemExpanded: "+self.tree.GetItemText(event.GetItem())

    def OnItemCollpased(self, event):
        print "OnItemCollpased: "+self.tree.GetItemText(event.GetItem())

    def OnSelChanged(self, event):
        print "OnSelfChenged: "+self.tree.GetItemText(event.GetItem())




class MyApp(wx.App):
    def OnInit(self):
        self.frame = TreeFrame(None)
        self.frame.Show()
        return True

app = MyApp()
app.MainLoop()

這是一個帶圖片的控制元件的使用

#!/usr/bin/python
#-*- coding:utf8 -*-


import wx
import wx.gizmos as gizmos

class TreeFrame(wx.Frame):
    def __init__(self, root):
        wx.Frame.__init__(self, root, -1, u"樹形控制元件使用", size=(400,400))
        self.tree = gizmos.TreeListCtrl(self, -1, style=wx.TR_DEFAULT_STYLE | wx.TR_FULL_ROW_HIGHLIGHT)
        self.img = wx.ImageList(16,16,True)
        self.img.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, (16,16)))
        self.img.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, (16,16)))
        self.img.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, (16,16)))
        self.tree.SetImageList(self.img)


        self.tree.AddColumn(u"第一列")
        self.tree.AddColumn(u"第二列")
        self.tree.AddColumn(u"第三列")
        self.tree.SetColumnWidth(0, 200)
        
        self.root = self.tree.AddRoot("root")
        self.tree.SetItemText(self.root, "", 1)
        self.tree.SetItemText(self.root, "", 2)
    
        for x in range(5):
            child = self.tree.AppendItem(self.root, str(x))
            self.tree.SetItemText(child, str(x), 0)
            self.tree.SetItemText(child, str(x), 1)
            self.tree.SetItemText(child, str(x), 2)
            self.tree.SetItemImage(child, 0, which = wx.TreeItemIcon_Normal)
            self.tree.SetItemImage(child, 1, which = wx.TreeItemIcon_Expanded)
            for y in range(5):
                last = self.tree.AppendItem(child, str(y))
                self.tree.SetItemText(last, str(x) + "-" + str(y), 0)
                self.tree.SetItemText(last, str(x) + "-" + str(y), 1)
                self.tree.SetItemText(last, str(x) + "-" + str(y), 2)
                self.tree.SetItemImage(last, 0, which = wx.TreeItemIcon_Normal)
                self.tree.SetItemImage(last, 1, which = wx.TreeItemIcon_Expanded)
        self.tree.Expand(self.root)  



class MyApp(wx.App):
    def OnInit(self):
        self.frame = TreeFrame(None)
        self.frame.Show()
        return True

app = MyApp()
app.MainLoop()