Treeview сохранение определенных столбцов

Прошу помощи. Есть Treеview с 7 колонками. Необходимо производить два разных сохранения в файлы, в 1 файл все колонки из Treеview, во второй файл только 2-5 колонки. В формате CSV. Немного кода:

 self.tree = ttk.Treeview(self, columns=("1", "2", "3", "4", "5", "6", "7"), height=30,  show="headings")        
    self.tree.column("1", width=50, anchor=tk.CENTER)
    self.tree.column("2", width=150, anchor=tk.CENTER)
    self.tree.column("3", width=50, anchor=tk.CENTER)
    self.tree.column("4", width=50, anchor=tk.CENTER)
    self.tree.column("5", width=70, anchor=tk.CENTER)        
    self.tree.column("6", width=70, anchor=tk.CENTER)
    self.tree.column("7", width=70, anchor=tk.CENTER)

Кнопка добавление + сохранение в файл

 btn_zap = ttk.Button(Form3, text="Сохранить Все", command=lambda: [self.Zapis()])        
 btn_zap.place(x=70, y=250)

 btn_zap = ttk.Button(Form3, text="Сохранить часть", command=lambda: [self.Zapis_2()])        
 btn_zap.place(x=170, y=250)

 def Zapis(self):# Запись в файл
    file = open(file_path, "a", encoding='utf-8')
    file.write(str(self.1) + ",")        
    file.write(str(self.2.get() + ","))
    file.write(str(self.3.get() + ","))
    file.write(str(self.4.get() + ","))
    file.write(str(self.5.get() + ","))        
    file.write(str(self.6.get() + ","))        
    file.write(str(self.7.get() + "\n"))        
    self.1.delete(0, "end")
    self.2.delete(0, "end")
    self.3.delete(0, "end")        
    self.4.delete(0, "end")
    self.5.delete(0, "end")
    self.6.delete(0, "end")        
    self.7.delete(0, "end")        
    file.close()

 def Zapis(self):# Запись в файл 2


 ????
 filedialog.asksaveasfilename(filetypes=(("CSV files", "*.csv")))

Ответы (1 шт):

Автор решения: Fox Fox

Пример - технологии, которые на мой взгляд должны быть использованы. Очень упрощено, без страховок и проверок.

import csv
import tkinter
import tkinter.ttk
import tkinter.messagebox

# Пример данных для Treeview
data = [
    ("Row1_Col1", "Row1_Col2", "Row1_Col3", "Row1_Col4", "Row1_Col5", "Row1_Col6", "Row1_Col7"),
    ("Row2_Col1", "Row2_Col2", "Row2_Col3", "Row2_Col4", "Row2_Col5", "Row2_Col6", "Row2_Col7"),
    # Добавьте больше строк по необходимости
]

# Создаем окно Tkinter
root = tkinter.Tk()
root.title("Treeview Example")

# Создаем Treeview
columns = [f"#{i}" for i in range(1, 8)]
tree = tkinter.ttk.Treeview(root, columns=columns, show="headings")
tree.pack()

# Добавляем заголовки колонок
for i, col in enumerate(columns, start=1):
    tree.heading(col, text=f"№{i}")

# Заполняем Treeview данными
for row in data:
    tree.insert("", "end", values=row)

# Функция для сохранения всех колонок в CSV
def save_all_columns():
    with open("all_columns.csv", mode='w', newline='') as file:
        writer = csv.writer(file)
        # Записываем заголовки
        writer.writerow([tree.heading(col)["text"] for col in tree["columns"]])
        # Записываем данные
        for row in tree.get_children():
            writer.writerow(tree.item(row)["values"])
    tkinter.messagebox.showinfo("Сохранение завершено", "Все колонки сохранены в all_columns.csv!")

# Функция для сохранения колонок 2-5 в CSV
def save_selected_columns():
    with open("selected_columns.csv", mode='w', newline='') as file:
        writer = csv.writer(file)
        # Записываем заголовки
        writer.writerow([tree.heading(col)["text"] for col in tree["columns"][1:5]])
        # Записываем данные
        for row in tree.get_children():
            values = tree.item(row)["values"]
            writer.writerow(values[1:5])
    tkinter.messagebox.showinfo("Сохранение завершено", "Колонки 2-5 сохранены в selected_columns.csv!")

# Создаем кнопки
btn_save_all = tkinter.Button(root, text="Сохранить все", command=save_all_columns)
btn_save_all.pack(side=tkinter.LEFT, padx=10, pady=10)

btn_save_selected = tkinter.Button(root, text="Сохранить колонки 2-5", command=save_selected_columns)
btn_save_selected.pack(side=tkinter.LEFT, padx=10, pady=10)

# Запускаем главный цикл Tkinter
root.mainloop()
→ Ссылка