树控件与HTML在应用中的使用
发布时间: 2025-08-17 02:04:08 阅读量: 1 订阅数: 5 

# 树控件与HTML在应用中的使用
## 1. 树控件用户可编辑设置
树控件可设置为允许用户编辑各种树项的文本显示,这能使控件具有交互性,用户可即时更改数据,在DOM或XML编辑器中很有用,用户能直接从结构化视图更改文档。
### 1.1 启用可编辑功能
通过在创建树控件时使用样式标志 `wx.TR_EDIT_LABELS` 来启用此功能。设置该标志后,树控件的行为类似于可编辑列表控件。选择树项时,用户会获得一个文本控件来编辑文本。按 `Escape` 键可取消编辑且不更改项,以其他方式(如按 `Enter` 键或点击文本控件外部)结束编辑会话则会确认编辑并更改树项。
### 1.2 编程方式控制编辑
- **开始编辑**:使用 `EditLabel(item)` 方法以编程方式开始对特定树项的编辑,`item` 参数是要编辑项的 `wx.TreeItemId`,触发的编辑过程与用户选择该项时相同。
- **结束编辑**:使用 `EndEditLabel(cancelEdit)` 方法从程序中停止编辑。截至目前,该方法仅在Windows系统上有效。`cancelEdit` 参数是布尔值,若为 `True`,则取消编辑且树项不变;若为 `False`,则正常接受编辑。
- **获取编辑控件**:若需要访问实际使用的文本编辑控件,可调用 `GetEditControl()` 方法,该方法返回当前编辑使用的 `wx.TextCtrl` 实例,若没有当前编辑则返回 `None`。目前此方法仅在Windows系统上有效。
### 1.3 编辑事件
- **开始编辑事件**:当编辑会话开始时,无论是通过用户选择还是调用 `EditLabel()` 方法,都会触发类型为 `wx.EVT_TREE_BEGIN_LABEL_EDIT` 的 `wx.TreeEvent`。若使用事件的 `Veto()` 方法否决此事件,则编辑实际上不会开始。
- **结束编辑事件**:当会话结束时,无论是通过用户点击还是调用 `EndEditLabel()` 方法,都会触发类型为 `wx.EVT_TREE_END_LABEL_EDIT` 的事件。此事件也可被否决,若被否决,则取消编辑且树项不变。
### 1.4 树控件的有效命中测试标志
| 命中测试标志 | 描述 |
| --- | --- |
| `wx.TREE_HITTEST_ABOVE` | 点在树的客户区上方,不属于任何项 |
| `wx.TREE_HITTEST_BELOW` | 点在树的客户区下方,不属于任何项 |
| `wx.TREE_HITTEST_NOWHERE` | 点在树的客户区内,但仍不属于任何项 |
| `wx.TREE_HITTEST_ONITEMBUTTON` | 点在项的展开/收缩图标按钮上 |
| `wx.TREE_HITTEST_ONITEMICON` | 点在项的图像部分上 |
| `wx.TREE_HITTEST_ONITEMINDENT` | 点在项显示文本左侧的缩进区域内 |
| `wx.TREE_HITTEST_ONITEMLABEL` | 点在项的显示文本内 |
| `wx.TREE_HITTEST_ONITEMRIGHT` | 点在项显示文本的右侧 |
| `wx.TREE_HITTEST_ONITEMSTATEICON` | 点在项的状态图标内 |
| `wx.TREE_HITTEST_TOLEFT` | 点在树的客户区左侧,不属于任何项 |
| `wx.TREE_HITTEST_TORIGHT` | 点在树的客户区右侧,不属于任何项 |
## 2. 响应树控件的其他用户事件
### 2.1 wx.TreeEvent类的属性
| 属性 | 描述 |
| --- | --- |
| `GetKeyCode()` | 返回按下键的整数键码,仅对事件类型 `wx.EVT_TREE_KEY_DOWN` 有效,此属性不会告知是否还按下了任何修饰键 |
| `GetItem()` | 返回事件所针对项的 `wx.TreeItemId` |
| `GetKeyEvent()` | 仅对 `wx.EVT_TREE_KEY_DOWN` 事件有效,返回被 `wx.TreeEvent` 包装的底层 `wx.KeyEvent`,此键事件能告知在事件期间是否按下了修饰键(如 `Shift` 或 `Command`) |
| `GetLabel()` | 返回项的当前文本标签,对 `wx.EVT_TREE_BEGIN_LABEL_EDIT` 和 `wx.EVT_TREE_END_LABEL_EDIT` 有效 |
| `GetPoint()` | 返回事件的鼠标位置的 `wx.Point`,仅对拖动事件有效 |
| `IsEditCancelled()` | 仅对 `wx.EVT_TREE_END_LABEL_EDIT` 操作有效,返回布尔值,若当前编辑以用户取消结束则为 `True`,否则为 `False` |
| `SetToolTip(tooltip)` | 仅对 `wx.EVT_TREE_ITEM_GETTOOLTIP` 事件有效,允许为项设置工具提示,此属性仅在Windows系统上有效 |
### 2.2 树控件的其他事件类型
| 事件类型 | 描述 |
| --- | --- |
| `wx.EVT_TREE_BEGIN_DRAG` | 当用户按下鼠标左键开始拖动树项时触发此事件。为使拖动实际生效,事件处理程序必须显式调用事件方法 `Allow()` |
| `wx.EVT_TREE_BEGIN_RDRAG` | 当用户按下鼠标右键开始拖动树项时触发此事件(在Macintosh系统上,这意味着控制点击)。为使拖动实际生效,事件处理程序必须显式调用事件方法 `Allow()` |
| `wx.EVT_TREE_ITEM_ACTIVATED` | 当用户双击激活项时触发 |
| `wx.EVT_TREE_ITEM_GETTOOLTIP` | 当鼠标悬停在树中的项上时发送此事件,可用于为该项设置特定的工具提示。只需在事件对象中设置标签参数,系统将处理其余部分 |
| `wx.EVT_TREE_KEY_DOWN` | 当树控件获得焦点时按下键时发送此事件 |
## 3. 使用树列表控件
除了 `wx.TreeCtrl`,`wxPython` 还提供了 `wx.gizmos.TreeListCtrl`,它是树控件和报表模式列表控件的组合。除了本章讨论的 `wx.TreeCtrl` 的功能外,`TreeListCtrl` 还能为每行显示额外的数据列。
### 3.1 示例代码
```python
import wx
import wx.gizmos
import data
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="TreeListCtrl", size=(400,500))
il = wx.ImageList(16,16)
self.fldridx = il.Add(
wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, (16,16)))
self.fldropenidx = il.Add(
wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, (16,16)))
self.fileidx = il.Add(
wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, (16,16)))
self.tree = wx.gizmos.TreeListCtrl(self, style =
wx.TR_DEFAULT_STYLE | wx.TR_FULL_ROW_HIGHLIGHT)
self.tree.AssignImageList(il)
self.tree.AddColumn("Class Name")
self.tree.AddColumn("Description")
self.tree.SetMainColumn(0) # the one with the tree in it...
self.tree.SetColumnWidth(0, 200)
self.tree.SetColumnWidth(1, 200)
root = self.tree.AddRoot("wx.Object")
self.tree.Set
```
0
0
相关推荐






