直接跳到内容

DirectoryTree 目录树

DirectoryTree 以树形结构展示文件系统目录,支持文件/目录点击选中事件,以及通过 filter_pattern 进行 glob 模式过滤,适合构建文件浏览器或项目浏览工具。

底层:Textual FilterableDirectoryTree(扩展自 DirectoryTree,带过滤功能)

基本用法

vue
<template>
  <VBox style="height: 1fr;">
    <DirectoryTree
      path="./"
      style="height: 1fr;"
      @directory_tree_file_selected="on_file_select"
    />
    <Label :label="f'选中: {selected_file.value}'" />
  </VBox>
</template>

<script lang="py">
from vuepy import ref

selected_file = ref("(未选择)")

def on_file_select(event):
    selected_file.value = str(event.path)
</script>

Props

属性类型默认值说明
pathstr | Path必填,要展示的根目录路径(绝对路径或相对路径均可)
filter_patternstrNone文件名过滤模式(glob 格式,如 "*.py"),默认显示全部文件

v-model

v-model 默认绑定属性:path

通过 v-model 可动态切换展示的根目录路径。

事件

事件说明
@directory_tree_file_selected文件节点被选中时触发(DirectoryTree.FileSelected),event.pathPath 对象
@directory_tree_directory_selected目录节点被选中时触发(DirectoryTree.DirectorySelected),event.pathPath 对象

文件过滤示例

vue
<template>
  <VBox style="height: 1fr;">
    <HBox style="height: 3;">
      <Button label="全部" @click="set_filter('')" />
      <Button label="仅 Python" @click="set_filter('*.py')" />
      <Button label="仅 Markdown" @click="set_filter('*.md')" />
    </HBox>
    <DirectoryTree
      :path="root_path"
      :filter_pattern="filter_pattern.value"
      style="height: 1fr;"
      border_title="文件浏览器"
      @directory_tree_file_selected="on_file"
      @directory_tree_directory_selected="on_dir"
    />
    <Label :label="status.value" />
  </VBox>
</template>

<script lang="py">
from vuepy import ref
import os

root_path      = os.path.expanduser("~/")
filter_pattern = ref("")
status         = ref("(未选择)")

def set_filter(pattern):
    filter_pattern.value = pattern

def on_file(event):
    status.value = f"📄 {event.path}"

def on_dir(event):
    status.value = f"📁 {event.path}"
</script>

与 Tree 组件对比

特性DirectoryTreeTree
数据来源文件系统(自动)手动构建
懒加载子目录✓(自动)可手动实现
文件过滤✓(glob 模式)
自定义节点数据

通用属性

所有 Textual-vuepy 组件均支持以下属性:

属性类型说明
idstr组件 CSS ID
stylestrTCSS 内联样式
classstrTCSS 类名(空格分隔)
border_titlestr边框标题
border_subtitlestr边框副标题
DirectoryTree 目录树已经加载完毕