打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
wx.TreeCtrl

wx.TreeCtrl

(2008-04-24 15:39:16)
标签:

电脑

节点

tr

hide

python

分类: Python

wxPython的wx.TreeCtrl是wxWidgets的wxTreeCtrl的Python封装,所以下面在讨论的时候可能会在两个版本之间有所重叠,由于用词的不同,应该可以区分开来。我是从wxWidgets的帮助文档中获得信息的,但是尽量使用wxPython中的术语来进行陈述,但是有些地方我还没有在wxPython当中使用过,所以这些地方将使用wxWidgets的说法(会有所说明)。

 

wx.TreeCtrl当中的所有节点都是通过一个TreeItemId来索引的。假如a是这样的一个TreeItemId,那么可以用a.IsOk()来判断这个TreeItemId在这个TreeCtrl当中是否有效。

 

创建TreeCtrl时的样式选择:

 

wx.TR_EDIT_LABELS 如果想让节点标签使用的文字可以修改,那么请使用这个样式。
wx.TR_NO_BUTTONS 这种样式在各个节点左边不会显示箭头或者带方框的小加号(用于标识该节点是否有子节点,该节点是否已经展开等信息)等可以点击的小按钮。
wx.TR_HAS_BUTTONS 与上面一个正好相反。是惯常使用的样式。
wx.TR_NO_LINES 不显示左边链接兄弟节点的那根虚线(vertical level connector)。
wx.TR_FULL_ROW_HIGHLIGHT 让被选中的节点所在的行整个高亮显示(在Windows下会被忽略,除非你同时使用了wx.TR_NO_LINES。
wx.TR_LINES_AT_ROOT 显示连接root节点的连线,只有当使用了wx.TR_HIDE_ROOT,并且没有使用wx.TR_NO_LINES的时候有效。
wx.TR_HIDE_ROOT 不显示root节点,root节点的子节点被显示为root节点。
wx.TR_ROW_LINES 针对选中的行显示一个边框。Use this style to draw a contrasting border between displayed rows.
wx.TR_HAS_VARIABLE_ROW_HEIGHT 这个样式让所有行的行高设置为刚好容纳给行的内容。如果没使用这个样式,那么所有行的行高都设为其中需要的最高行高。默认没有使用这个样式。
wx.TR_SINGLE 只能选中一个节点,默认使用。
wx.TR_MULTIPLE 允许选中多个节点(应当是连续的)。
wx.TR_EXTENDED 允许选中多个不连续的节点(部分实现,不一定在所有情况下都工作)。
wx.TR_DEFAULT_STYLE 针对本地系统自动设置的最接近本地显示方案的一组样式。

 

 

如何判断被选中的节点是否是叶节点?得到被选中节点的TreeCtrlId,比如是a。那么a.GetLastChild()将会返回该节点的最后一个子节点的TreeCtrlId,如果没有子节点,将返回一个无效的TreeCtrlId。这样,通过检查这个返回的TreeCtrlId是否有效就可以知道这个节点是否是叶节点。

 

wx.TreeCtrl.AppendItem()

其第一个参数为父节点的TreeItemId,如果是根节点当然没有父节点,所有有另外一个函数wx.TreeCtrl.AddRoot()来添加根节点。

第二个参数是显示在节点标签上的字符串。

返回值为一个TreeItemId。

 

AppendItem()返回的TreeItemId似乎没有什么用处啊,这个TreeItemId和当这个节点被选中的时候产生的TreeItemId不是同样的值啊……是不是应该用AppendItem()函数中的TreeItemData那个参数呢?

 

当创建了一个wx.TreeCtrl实例以后,你应当用AddRoot()来添加一个根节点,然后在这个根节点下面添加下一级节点,如此下去。不过根节点是只能添加一个的,不能添加第二次。那么当你想要一个看起来有多个并列根节点的树状控件的时候,你就应该使用样式wx.TR_HIDE_ROOT了,这能在视觉上满足你的要求。

wx.TreeCtrl.AddRoot( text, image=-1, selImage=-1, data=None)

两个关于image的参数是需要的图像在这个wx.TreeCtrl图像列表中的索引值。data参数指定了一个与根节点关联的对象,wxPython in action中说这最多起到排序的作用,而且如果是使用Python的话,会有一个更好的快捷方法实现相应的功能。函数返回一个对应root节点的ID。wx.TreeCtrl使用自己的类wx.TreeItemId来管理树中的items。我们不需要知道这些TreeItemId的具体值到底是多少,只要知道它们能够测试互相是否相等,这就完全够用了。wx.TreeItemId没有被映射到任何的简单类型,因为它的具体数值是完全没有意义的。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python|二叉树叶子结点问题解决方法
刻意练习:LeetCode实战 -- Task24. 恢复二叉搜索树
Python如何实现深度优先与广度优先?
线性规划理论和python实战-第十一章 图与网络Kruskal算法
找树左下角的值
Python实例讲解 tkinter canvas (设置背景图片及文字)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服