【发布时间】:2020-04-11 16:32:07
【问题描述】:
我在编写一个函数时遇到了麻烦,该函数可以通过.getmembers() 方法获取 tarfile 项目列表并将它们放在 Treeview 小部件中的适当树结构(文件夹和子文件夹中的文件)中。我找到了一个与我想要的类似的帖子:Tkinter: Treeview widget,但我无法让它适应查看档案。
我引用的解决方案的问题是它使用os 遍历给定目录并将项目插入树视图。当然,这对 tarfile 不起作用,因为它是一个文件,而不是文件夹,所以当我尝试修改解决方案时,我将 tarfile 成员存储在一个列表中并尝试通过该函数提供它,但它对我不起作用。
基本上,我需要帮助编写一个函数,该函数采用目录和文件名列表,可以将父目录插入树视图的根目录,并将子项插入其包含的文件夹。
import os
import tkinter as tk
import tkinter.ttk as ttk
import tarfile
window = tk.Tk()
window.title("Testing")
window.geometry("500x500")
tree = ttk.Treeview(window)
tree.pack()
tree.heading('#0', text="Item")
tree.column('#0', width=495)
# Get TAR items
with tarfile.TarFile("testing.tar") as topen:
tarlist = topen.getmembers()
# Get our first directory in the list and remove it from stack
for i in tarlist:
if i.isdir() == True:
start_node = i.name
del tarlist[tarlist.index(i)]
break
# Insert root folder
root_node = tree.insert('', 'end', text=start_node)
def insert():
# Go through the rest of the member list and put the member in the proper place
# within the tree structure
window.mainloop()
【问题讨论】:
-
"它只是不适合我" 您能否在此处添加带有 Traceback 错误的函数?
-
好吧,如果你想要一些回溯,我使用了下面建议的解决方案,它给出了“项目 pylzma-master/pylzma-master/src 已经存在”。但是我假设您在谈论我之前所拥有的内容,因为我无法按 Ctrl-Z 回到它,所以我无法真正获得我原来的最佳解决方案。基本上没有回溯错误;它只是以一种不受欢迎的方式显示内容。我最初的解决方案使用 os.dirname 的某种组合来获取树项的目录名并将其与列表项的目录名进行比较以确定它是否是子项,它是混乱和钝的。
-
另外,我理解我提出问题的方式就像“为我制作这个函数”,但我花了很多时间试图弄清楚我写的每个函数都没有给我想要的结果.选择一个放在我的代码示例中会很困难,只会添加不需要的绒毛。谢谢,祝您有愉快的一天!
标签: python tkinter treeview tarfile