实战wxPython系列041 树形控件wx。TreeCtrl将信息表示为层次结构,其中的项可以展开以显示更多的项。 一、树状控件wx。TreeCtrl wx。TreeCtrl继承自wx。WithImages类,因此提供了将图像与控件项关联的函数。通过wx。WithImages可以使每个项使用索引来引用它的图像。除正常图像外,用上述方法处理wx。TreeCtrl还提供了可选的状态图像,可用于指示项目的一些附加状态,例如选中或未选中状态。 wx。TreeCtrl支持的窗口样式:wx。TREDITLABELS:子项文本是否可编辑。wx。TRNOBUTTONS:不必显示用于展开或者合并子项的按钮。wx。TRHASBUTTONS:显示用于展开或者合并子项的按钮。wx。TRTWISTBUTTONS:选择按钮的替代样式,并显示旋转(扭转)箭头。目前这种风格只在微软WindowsVista和以后的Windows版本下实现,在其他平台下被忽略。wx。TRNOLINES:不必显示用于表示层级关系的垂直虚线。wx。TRFULLROWHIGHLIGHT:当选中某个子项的时候高亮显示整行(在windows平台上,除非设置了wx。TRNOLINES,否则这个类型将被忽略)wx。TRLINESATROOT:不必显示根节点之间的连线。这个类型只有在设置wx。TRHIDEROOT并且没有设置wx。TRNOLINES的时候有效。wx。TRHIDEROOT:不显示根节点,这将导致第一层的字节点成为一系列根节点。wx。TRROWLINES:使用这个类型在已显示的行之间绘制一个高对比的边界。wx。TRHASVARIABLEROWHEIGHT:设置这个类型允许各行采用不同的高度,否则各行都将采用和最大的行高同样的高度。这个类仅适用于树状控件的标准实现(而非各个平台的原生实现)。wx。TRSINGLE:单选模式。wx。TRMULTIPLE:多选模式。wx。TRDEFAULTSTYLE:默认窗口样式。 wx。TreeCtrl发出的事件:EVTTREEBEGINDRAG:鼠标左键拖动时产生。EVTTREEBEGINRDRAG:鼠标右键拖动时产生。EVTTREEENDDRAG:鼠标左键或右键结束拖拽时产生。EVTTREEBEGINLABELEDIT:开始编辑标签时产生。可以通过调用Veto()来阻止事件生成。EVTTREEENDLABELEDIT:结束编辑标签时产生。可以通过调用Veto()来阻止事件生成。EVTTREEDELETEITEM:当某个子项被删除的时产生。EVTTREEGETINFO:当某个子项的数据被请求的时产生。EVTTREESETINFO:当某个子项的数据被设置的时产生。EVTTREEITEMACTIVATED:当某个子项被激活(双击或者使用键盘选择)的时产生。EVTTREEITEMCOLLAPSED:给定的子项已被折叠(合并)的时产生。EVTTREEITEMCOLLAPSING:给定的子项即将折叠(合并)的时产生。可以通过调用Veto()来阻止事件生成。EVTTREEITEMEXPANDED:给定子项已被展开的时产生。EVTTREEITEMEXPANDING:给定子项即将展开的时产生。可以通过调用Veto()来阻止事件生成。EVTTREEITEMRIGHTCLICK:当鼠标右键单击了子项时产生。EVTTREEITEMMIDDLECLICK:当鼠标中键单击了子项时产生。EVTTREESELCHANGED:选中的子项发生变化以后(新的子项被选中或者旧的选中项不被选中的时候)产生。EVTTREESELCHANGING:选中的子项即将发生变化的时产生。可以通过调用Veto()来阻止事件生成。EVTTREEKEYDOWN:当针对该树状控件的键盘事件发生时产生。EVTTREEITEMGETTOOLTIP:设置子项的提示信息时产生(仅适用Windows)。EVTTREEITEMMENU:当鼠标右键或者使用菜单键激活子项的上下文菜单时产生。EVTTREESTATEIMAGECLICK:当子项的状态图像被点击时产生。 wx。TreeCtrl常用方法:AddRoot(self,text,image1,selImage1,dataNone):将根节点添加到树中,返回新子项。AppendItem(self,parent,text,image1,selImage1,dataNone):将一个子项目添加到由父分支标识的分支末尾,返回一个新的子项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,discardChangesFalse):结束编辑给定子项的标签信息。EnsureVisible(self,item):滚动和或展开给定子项以确保给定的子项是可见的。Expand(self,item):展开给定的子项。ExpandAll(self):展开树形控件的所有子项。ExpandAllChildren(self,item):递归展开给定项及其所有子项。GetChildrenCount(self,item,recursivelyTrue):返回分支中的子项数。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,selectTrue):选择给定的子项。在多选控件中,如果select的值为False,也可用于取消选择当前选定的项。SetItemData(self,item,data):设置指定项的客户区数据。SetItemText(self,item,text):设置指定项的标签信息。Unselect(self):取消当前选定项(如果有)。 图1:wx。TreeCtrl类继承关系 二、wx。TreeCtrl演示树形控件(wx。TreeCtrl)importwxclassSampleTreeCtrl(wx。Frame):definit(self,args,kw):super(SampleTreeCtrl,self)。init(args,kw)self。InitUi()defInitUi(self):设置标题self。SetTitle(实战wxPython:TreeCtrl演示)设置窗口尺寸self。SetSize(400,320)panelwx。Panel(self)vboxwx。BoxSizer(wx。VERTICAL)创建树形控件self。treectrlwx。TreeCtrl(panel,wx。IDANY,wx。DefaultPosition,(1,1),wx。TRHIDEROOTwx。TRHASBUTTONS)显示树形控件选中项的名称self。infowx。StaticText(panel,wx。IDANY,,wx。DefaultPosition,(1,40),stylewx。ALIGNCENTER)给树形控件添加数据rootself。treectrl。AddRoot(程序员)osself。treectrl。AppendItem(root,操作系统);proglangself。treectrl。AppendItem(root,编程语言)toolkitself。treectrl。AppendItem(root,工具包)self。treectrl。AppendItem(os,Windows)self。treectrl。AppendItem(os,Ubuntu)self。treectrl。AppendItem(os,Android)compilelangself。treectrl。AppendItem(proglang,编译语言)shelllangself。treectrl。AppendItem(proglang,脚本语言)self。treectrl。AppendItem(compilelang,C)self。treectrl。AppendItem(compilelang,C)self。treectrl。AppendItem(compilelang,JAVA)self。treectrl。AppendItem(shelllang,JS)self。treectrl。AppendItem(shelllang,PHP)self。treectrl。AppendItem(shelllang,Python)self。treectrl。AppendItem(shelllang,Lua)self。treectrl。AppendItem(toolkit,QT)self。treectrl。AppendItem(toolkit,wxWidgets)self。treectrl。AppendItem(toolkit,Gtk)self。treectrl。AppendItem(toolkit,Swing)self。treectrl。ExpandAll()事件处理self。treectrl。Bind(wx。EVTTREESELCHANGED,self。OnSelChanged)vbox。Add(self。treectrl,1,wx。EXPAND,border10)vbox。Add(self。info)panel。SetSizer(vbox)self。Centre()defOnSelChanged(self,e):iteme。GetItem()self。info。SetLabel(self。treectrl。GetItemText(item))defmain():appwx。App()sampleSampleTreeCtrl(None)sample。Show()app。MainLoop() 上述代码演示如何创建一个wx。TreeCtrl控件,并给控件添加一些子项,当我们用鼠标选择某个子项时,该子项的标签信息将被显示在下面的静态文本控件上。 图2:wx。TreeCtrl演示 三、本文知识点了解和使用wx。TreeCtrl。 前一篇:wxPython高级控件之列表框ListCtrl 请关注,评论,收藏,点赞,和转发。