У меня возникли проблемы с написанием функции, которая могла бы получить список элементов tarfile с помощью метода .getmembers()
и поместить их в правильную древовидную структуру (файлы в папках и подпапках) в виджете Treeview. Я нашел сообщение, похожее на то, что я хотел: Tkinter: виджет Treeview, но я просто не мог получить он адаптирован для просмотра архивов.
Проблема с решением, на которое я ссылался, заключается в том, что оно использует os
для обхода заданного каталога и вставки элементов в Treeview. Конечно, это не будет работать с tar-файлом, потому что это файл, а не папка, поэтому, когда я попытался изменить решение, я сохранил элементы tar-файла в списке и попытался передать его через функцию, но это просто не работает для меня.
По сути, мне нужна помощь в написании функции, которая принимает список имен каталогов и файлов и может вставлять родительские каталоги в корень дерева, а дочерние элементы — в содержащие их папки.
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()