递归遍历枚举一目录下在的子目录和子文件,并使用Tkinter的TreeView控件显示:
import tkinter as tk
from tkinter import ttk
import os, fnmatch
window = tk.Tk()
# 定义列的名称
tree = ttk.Treeview(window, show = "tree")
def all_files(dir, root):
for home, subdirs, files in os.walk(dir):
for idx, dir in enumerate(subdirs):
sub_path = os.path.join(home, dir)
sub_id = tree.insert(root, idx, text=dir, open=1)
all_files(sub_path, sub_id) # 递归子目录
for idx, fil in enumerate(files):
tree.insert(root, idx, text=fil)
break # 一层就跳出,二层子文件由递归完成
root = tree.insert("", 0,text="目录", open=1)
all_files("F:\\TestFolder", root)
# 鼠标选中一行回调
def selectTree(event):
for item in tree.selection():
print(item, ' =>', tree.item(item))
# 选中行
tree.bind('<<TreeviewSelect>>', selectTree)
tree.pack(expand = True, fill = tk.BOTH)
window.mainloop()
说明:
-
tree = ttk.Treeview(window, show="tree")
: 创建Treeview实例,显示方式为tree,如果show指定为 column 则显示为表格。 -
tree.insert()
: 插入节点, 参数:- parent:父级节点,为空字符串时表示根节点。
- index:插入如位置,可以是数字,也可以是
'end'
,表示插入到末尾。 - iid: 节点索引,在整个树的范围内具有唯一性,如果为None,则由内部自动分配。
- image: 图标。
- values: 附加数据,如果显示为表格时,values表示各列数据
- open: 1展开,0折叠
- tags: 附加数据
- 使用
os.walk(dir)
遍历目录,由于这个方法会自动递归遍历所有子目录,因此循环一次就跳出,子目录用递归方法插入。
网友评论