通过目录结构生成treeview的两种方法:
1.之前参考的代码用的os.listdir(),文件夹数量多容易卡住。
2.自己想了一个用os.walk()返回的元组生成的,只用读一次目录,之后只用操作列表,打开复杂文件夹表现应该好一点。
如下图两种方法表现一样
代码如下:
import os
import tkinter as tk
from tkinter import ttk
#方法1:将os.walk生成的元组转成列表list1,并通过列表生成treeview
UserPath=r"C:\Users\Administrator\Desktop\1"
a=os.walk(UserPath)
list1=[]
for i in a:
list1.append(list(i))
#通过list1中的元素生成目录Treeview
def LoadTree(myroot,mylist):
for i in mylist[1]:
_pathValue=mylist[0]+os.sep+i
_dirTree=_myTree.insert(myroot,"end",text=i,values=_pathValue)
for j in list1:
if j[0]==_pathValue:
LoadTree(_dirTree,j)
for i in mylist[2]:
_filePathValue=mylist[0]+os.sep+i
_fileTree=_myTree.insert(myroot,"end",text=i,values= _filePathValue)
#方法2:使用listdir生成treeview
def LoadTree2(parentPath,root):
filelist = os.listdir(parentPath)
for filename in filelist:
absPath = os.path.join(parentPath,filename)
treey =_myTree2.insert(root,'end',text=filename,values=(absPath))
#判断路径是否是文件夹
if os.path.isdir(absPath):
LoadTree2(absPath,treey)
#主窗口生成及配置
root=tk.Tk()
root.title("PyFileSync By CeresLi")
root.geometry("600x400")
#方法1
_myTree=ttk.Treeview(root,show="tree")
_myTree.pack()
_TreeRoot=_myTree.insert("","end",text=os.path.split(UserPath)[-1],values=UserPath)
LoadTree(_TreeRoot,list1[0])
#方法2
_myTree2=ttk.Treeview(root,show="tree")
_myTree2.pack()
_Tree2Root=_myTree2.insert("","end",text=os.path.split(UserPath)[-1],values=UserPath)
LoadTree2(UserPath,_Tree2Root)
root.mainloop()