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()