龙空技术网

wxPython - 高级控件之树状控件TreeCtrl

爱好史地的coder 111

前言:

现时姐妹们对“css树形控件”可能比较关注,兄弟们都需要学习一些“css树形控件”的相关文章。那么小编同时在网络上收集了一些有关“css树形控件””的相关内容,希望朋友们能喜欢,姐妹们快快来了解一下吧!

实战wxPython系列-041

树形控件wx.TreeCtrl将信息表示为层次结构,其中的项可以展开以显示更多的项。

一、树状控件wx.TreeCtrl

wx.TreeCtrl继承自wx.WithImages类,因此提供了将图像与控件项关联的函数。通过wx.WithImages可以使每个项使用索引来引用它的图像。除正常图像外,用上述方法处理wx.TreeCtrl还提供了可选的状态图像,可用于指示项目的一些附加状态,例如选中或未选中状态。

wx.TreeCtrl支持的窗口样式:

wx.TR_EDIT_LABELS:子项文本是否可编辑。wx.TR_NO_BUTTONS:不必显示用于展开或者合并子项的按钮。wx.TR_HAS_BUTTONS:显示用于展开或者合并子项的按钮。wx.TR_TWIST_BUTTONS:选择+/ -按钮的替代样式,并显示旋转(“扭转”)箭头。目前这种风格只在微软Windows Vista和以后的Windows版本下实现,在其他平台下被忽略。wx.TR_NO_LINES:不必显示用于表示层级关系的垂直虚线。wx.TR_FULL_ROW_HIGHLIGHT:当选中某个子项的时候高亮显示整行(在windows平台上,除非设置了wx.TR_NO_LINES,否则这个类型将被忽略)wx.TR_LINES_AT_ROOT:不必显示根节点之间的连线.这个类型只有在设置wx.TR_HIDE_ROOT 并且没有设置wx.TR_NO_LINES 的时候有效。wx.TR_HIDE_ROOT:不显示根节点,这将导致第一层的字节点成为一系列根节点。wx.TR_ROW_LINES:使用这个类型在已显示的行之间绘制一个高对比的边界。wx.TR_HAS_VARIABLE_ROW_HEIGHT:设置这个类型允许各行采用不同的高度,否则各行都将采用和最大的行高同样的高度。这个类仅适用于树状控件的标准实现(而非各个平台的原生实现)。wx.TR_SINGLE:单选模式。wx.TR_MULTIPLE:多选模式。wx.TR_DEFAULT_STYLE:默认窗口样式。

wx.TreeCtrl发出的事件:

EVT_TREE_BEGIN_DRAG:鼠标左键拖动时产生。EVT_TREE_BEGIN_RDRAG:鼠标右键拖动时产生。EVT_TREE_END_DRAG:鼠标左键或右键结束拖拽时产生。EVT_TREE_BEGIN_LABEL_EDIT:开始编辑标签时产生。可以通过调用Veto()来阻止事件生成。EVT_TREE_END_LABEL_EDIT:结束编辑标签时产生。可以通过调用Veto()来阻止事件生成。EVT_TREE_DELETE_ITEM:当某个子项被删除的时产生。EVT_TREE_GET_INFO:当某个子项的数据被请求的时产生。EVT_TREE_SET_INFO:当某个子项的数据被设置的时产生。EVT_TREE_ITEM_ACTIVATED:当某个子项被激活(双击或者使用键盘选择)的时产生。EVT_TREE_ITEM_COLLAPSED:给定的子项已被折叠(合并)的时产生。EVT_TREE_ITEM_COLLAPSING:给定的子项即将折叠(合并)的时产生。可以通过调用Veto()来阻止事件生成。EVT_TREE_ITEM_EXPANDED:给定子项已被展开的时产生。EVT_TREE_ITEM_EXPANDING:给定子项即将展开的时产生。可以通过调用Veto()来阻止事件生成。EVT_TREE_ITEM_RIGHT_CLICK:当鼠标右键单击了子项时产生。EVT_TREE_ITEM_MIDDLE_CLICK:当鼠标中键单击了子项时产生。EVT_TREE_SEL_CHANGED:选中的子项发生变化以后(新的子项被选中或者旧的选中项不被选中的时候)产生。EVT_TREE_SEL_CHANGING:选中的子项即将发生变化的时产生。可以通过调用Veto()来阻止事件生成。EVT_TREE_KEY_DOWN:当针对该树状控件的键盘事件发生时产生。EVT_TREE_ITEM_GETTOOLTIP:设置子项的提示信息时产生(仅适用Windows)。EVT_TREE_ITEM_MENU:当鼠标右键或者使用菜单键激活子项的上下文菜单时产生。EVT_TREE_STATE_IMAGE_CLICK:当子项的状态图像被点击时产生。

wx.TreeCtrl常用方法:

AddRoot(self, text, image=-1, selImage=-1, data=None):将根节点添加到树中,返回新子项。AppendItem(self, parent, text, image=-1, selImage=-1, data=None):将一个子项目添加到由父分支标识的分支末尾,返回一个新的子项id。Collapse(self, item):折叠给定的子项。CollapseAll(self):折叠根项。CollapseAllChildren(self, item):递归地折叠指定子项及其所有子项。CollapseAndReset(self, item):折叠指定项并删除该子项的所有子项。Delete(self, item):删除指定的子项。DeleteAllItems(self):删除控件的所有子项。DeleteChildren(self, item):删除给定子项的所有子项(不删除子项本身)。EditLabel(self, item):开始编辑给定子项的标签信息。EndEditLabel(self, item, discardChanges=False):结束编辑给定子项的标签信息。EnsureVisible(self, item):滚动和/或展开给定子项以确保给定的子项是可见的。Expand(self, item):展开给定的子项。ExpandAll(self):展开树形控件的所有子项。ExpandAllChildren(self, item):递归展开给定项及其所有子项。GetChildrenCount(self, item, recursively=True):返回分支中的子项数。GetCount(self):返回控件的子项数。GetItemData(self, item):返回与指定子项关联的树形控件项数据。GetItemText(self, item):返回指定子项的标签信息。GetRootItem(self):返回树形控件的根项。GetSelection(self):返回选定项,如果没有选定项则返回无效项。IsEmpty(self):如果控件为空(即没有项,甚至没有根项)则返回True。IsExpanded(self, item):如果指定子项是展开状态,则返回True(只有当它有子项时才有意义)。IsSelected(self, item):如果指定子项被选中则返回True。IsVisible(self, item):如果指定子项屏幕可见则返回 True。SelectChildren(self, parent):选择给定父节点的所有直接子节点。此函数只能与多选控件一起使用。SelectItem(self, item, select=True):选择给定的子项。在多选控件中,如果select的值为False,也可用于取消选择当前选定的项。SetItemData(self, item, data):设置指定项的客户区数据。SetItemText(self, item, text):设置指定项的标签信息。Unselect(self):取消当前选定项(如果有)。

图1:wx.TreeCtrl类继承关系

二、wx.TreeCtrl演示

#树形控件(wx.TreeCtrl)import wxclass SampleTreeCtrl(wx.Frame):    def __init__(self, *args, **kw):        super(SampleTreeCtrl, self).__init__(*args, **kw)        self.InitUi()    def InitUi(self):        #设置标题        self.SetTitle("实战wxPython: TreeCtrl演示")        #设置窗口尺寸        self.SetSize(400, 320)        panel = wx.Panel(self)        vbox = wx.BoxSizer(wx.VERTICAL)        #创建树形控件        self.treectrl = wx.TreeCtrl(panel, wx.ID_ANY, wx.DefaultPosition, (-1, -1), wx.TR_HIDE_ROOT | wx.TR_HAS_BUTTONS)        #显示树形控件选中项的名称        self.info = wx.StaticText(panel, wx.ID_ANY, "", wx.DefaultPosition, (-1, 40), style = wx.ALIGN_CENTER)        #给树形控件添加数据         root = self.treectrl.AddRoot("程序员")        os = self.treectrl.AppendItem(root, "操作系统");        prog_lang = self.treectrl.AppendItem(root, "编程语言")        tool_kit = self.treectrl.AppendItem(root, "工具包")        self.treectrl.AppendItem(os, "Windows")        self.treectrl.AppendItem(os, "Ubuntu")        self.treectrl.AppendItem(os, "Android")        compile_lang = self.treectrl.AppendItem(prog_lang, "编译语言")        shell_lang = self.treectrl.AppendItem(prog_lang, "脚本语言")        self.treectrl.AppendItem(compile_lang, "C")        self.treectrl.AppendItem(compile_lang, "C++")        self.treectrl.AppendItem(compile_lang, "JAVA")        self.treectrl.AppendItem(shell_lang, "JS")        self.treectrl.AppendItem(shell_lang, "PHP")        self.treectrl.AppendItem(shell_lang, "Python")        self.treectrl.AppendItem(shell_lang, "Lua")        self.treectrl.AppendItem(tool_kit, "QT")        self.treectrl.AppendItem(tool_kit, "wxWidgets")        self.treectrl.AppendItem(tool_kit, "Gtk+")        self.treectrl.AppendItem(tool_kit, "Swing")        self.treectrl.ExpandAll()        #事件处理        self.treectrl.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged)        vbox.Add(self.treectrl, 1, wx.EXPAND, border = 10)        vbox.Add(self.info)        panel.SetSizer(vbox)        self.Centre()    def OnSelChanged(self, e):        item = e.GetItem()        self.info.SetLabel(self.treectrl.GetItemText(item))def main():    app = wx.App()    sample = SampleTreeCtrl(None)    sample.Show()    app.MainLoop()

上述代码演示如何创建一个wx.TreeCtrl控件,并给控件添加一些子项,当我们用鼠标选择某个子项时,该子项的标签信息将被显示在下面的静态文本控件上。

图2:wx.TreeCtrl演示

三、本文知识点

了解和使用wx.TreeCtrl。

前一篇:wxPython -高级控件之列表框ListCtrl

请关注,评论,收藏,点赞,和转发。

标签: #css树形控件