实战wxPython:041 - 高级控件之树状控件TreeCtrl

2023-11-05

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

 图1:wx.TreeCtrl类继承关系

二、wx.TreeCtrl演示

#树形控件(wx.TreeCtrl)

import wx

class 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: 040 - 高级控件之列表控件ListCtrl

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实战wxPython:041 - 高级控件之树状控件TreeCtrl 的相关文章

随机推荐

  • DFT,可测试性设计--概念理解

    工程会接触DFT 需要了解DFT知识 但不需要深入 三种基本的测试 概念来自参考文档 1 边界扫描测试 boundary scan test 测试目标是IO PAD 利用jtag接口互连以方便测试 jtag接口 实现不同芯片之间的互连 这样
  • 南昌工程学院c语言答案,南昌工程学院C语言程序设计基础课件第1讲c语言结构.ppt...

    南昌工程学院C语言程序设计基础课件第1讲c语言结构 ppt 由会员分享 可在线阅读 更多相关 南昌工程学院C语言程序设计基础课件第1讲c语言结构 ppt 40页珍藏版 请在人人文库网上搜索 1 2021 3 28 1 计算机程序设计基础C语
  • 数据结构(C/C++)

    第一章 数组与字符串 1 1 数组 1 1 1 数组图解 1 1 2 数组操作 从数组的物理结构可知 数组的访问 但是修改就不是 由于每一个内容都是在物理内存上紧密相连接的 所以插入和删除会变得较为复杂 增 添加元素 即插入操作 需要先将插
  • 创建 一个node.js项目

    1 安装express npm install express save 2 安装成功后利用 express创建项目 express e 名称 npm i 3 创建数据库链接 db js module exports function s
  • 循环结构Linux,Linux shell 编程(八):循环结构

    循环语句 在shell中的循环语句如下 for while unitl case select for while unitl 必须以done结尾 for循环 for循环用来遍历数组 数据列表 或执行计算语句 在shell中 for循环有两
  • lvgl在Windows上的模拟器

    vs不知道什么时候被搞坏了 编译不了总是报找不到头文件 挺烦人的 换gcc来编译lvgl模拟器 编辑器用的是vscode 源码在这 https gitee com t01051 lvgl windows sim vscode from gi
  • 解决Android Studio卡顿的问题

    通用方案 Help gt Edit Custom VM Options 根据电脑状况按需分配 Xms2048m 初始堆 Xmx2048m 最大堆 XX MaxPermSize 2048m 最大非堆内存 XX ReservedCodeCach
  • vue 兄弟组件之间传值之bus

    有时候两个组件也需要通信 非父子关系 当然Vue2 0提供了Vuex 但在简单的场景下 可以使用一个空的Vue实例作为中央事件总线 参考 http blog csdn net u013034014 article details 54574
  • Meltdown:Reading Kernel Memory from User Space 论文中英对照

    Meltdown Reading Kernel Memory from User Space 翻译目录 摘要 Abstract 一 简介 Introduction 二 背景介绍 Background 1 乱序执行 Out of order
  • qt画线、画一条线

    catalog 示例 示例 两边淡 中间粗 中间最粗 是 Ma w 一般0 5左右 分成20份 左右各10份 void Painter draw line QPainter p int x1 int y1 int x2 int y2 dou
  • Python 面经系列之笔试题

    金九银十即将来临 整理了一份某手 某行的笔试题 如有更优解法 欢迎交流 题一 实现一个函数 参数是一个字符串 一个是子串长度 返回要求符合长度的子串出现最多次数的子串以及出现次数 如果最多出现次数有多个子串 都输出 例如 输入 allstr
  • mysql 更新指定字段部分字符替换

    mysql 更新指定字段部分字符替换 可以使用 MySQL 的 REPLACE 函数来替换字符串中的一部分字符 然后再将更新后的字符串保存回数据库 REPLACE 函数的语法如下 REPLACE str find string replac
  • 【Git系列教程-7】Pycharm中使用Git提交代码到Github或码云远程仓库详解

    说明 点击进入整个系列文章索引列表 Git系列教程 0 整体索引文件 文件名红色 表示在工作区 文件名绿色 表示在暂存区 文件名蓝色 表示文件有修改 位于暂存区 文件名无颜色 表示位于本地仓库区或已经提交到远程仓库区 文件名为红色 需要手动
  • nn.Embedding

    在PyTorch中 针对词向量有一个专门的层nn Embedding 用来实现词与词向量的映射 nn Embedding具有一个权重 weight 形状是 vocab size embedding dim Embedding层的输入形状是b
  • TensorFlow手写数字识别

    1 保存为图片 使用mnist数据集 from tensorflow examples tutorials mnist import input data mnist input data read data sets MNIST data
  • 阿里云ecs服务器如何设置实现访问互联网

    概述 阿里云上新开了一台ecs服务器 想访问外网下载或安装一些源依赖或者应用 我们如何设置安全组实现访问外网 首先我们先要了解rfc1918 什么是rfc1918 本段转载自 What is RFC 1918 Definition from
  • python_字典列表嵌套的排序问题

    上一篇我们聊到python 字典和列表嵌套用法 这次我们聊聊字典和列表嵌套中的排序问题 这个在python基础中不会提到 但实际经常运用 面试中也喜欢问 我们娓娓道来 在说组合排序之前 先来看看排序有哪些函数 排序函数 使用排序有两个可用方
  • recyclerlistview

    RecyclerView的基本用法 和百分比布局类似 RecyclerView也是新增布局 因此需要在项目的build gradle添加相应的依赖库才行 打开app build gradle文件 在dependencies闭包中添加如下内容
  • 单源最短路径问题c++实现(贪心算法)

    文章目录 1 认真审阅题目 明确题目的已知条件和求解的目标 2 问题建模 3 算法设计 4 编码实现 5 测试数据 6 程序运行结果 1 认真审阅题目 明确题目的已知条件和求解的目标 给定一个有向带权图 G V E 其中每条边的权是一个非负
  • 实战wxPython:041 - 高级控件之树状控件TreeCtrl

    树形控件wx TreeCtrl将信息表示为层次结构 其中的项可以展开以显示更多的项 一 树状控件wx TreeCtrl wx TreeCtrl继承自wx WithImages类 因此提供了将图像与控件项关联的函数 通过wx WithImag