Reputation:
Hello I wrote a program in tkinter (Python) and I have a problem with saving datas from treeview to file CSV. I dont use any sql database. Just problem with saving content of treeview. Does anybody please have any idea how to save content of treeview to CSV file according to my code?
from tkinter import *
from tkinter import ttk
from tkinter.filedialog import asksaveasfile
from tkinter.filedialog import askopenfile
from tkcalendar import Calendar,DateEntry
import csv
from tkinter.messagebox import showinfo,askquestion
root = Tk()
root.title("Medicine database")
one = StringVar()
two = StringVar()
three = StringVar()
four = StringVar()
def quit():
MsgBox = askquestion('Exit Application','Are you sure you want to exit the application',icon = 'warning')
if MsgBox == 'yes':
root.destroy()
def save():
with open("new.csv","w",newline='') as f:
w=csv.writer(f, delimiter='\t')
w.writerow(tree.get_children())
showinfo("Save to CSV file","File was saved")
def add_medicine():
row = tree.insert("",END,values=(e0.get(),e1.get(),e2.get(),cal1.get()))
e0.delete(0,END)
e1.delete(0,END)
e2.delete(0,END)
def select(event):
try:
cursor = tree.focus()
content = tree.item(cursor)
row = content["values"]
one.set(row[0])
two.set(row[1])
three.set(row[2])
except IndexError:
pass
def delete_all():
for i in tree.get_children():
tree.delete(i)
def edit():
try:
x = tree.selection()[0]
for item in x:
tree.item(x,values=(e0.get(),e1.get(),e2.get(),cal1.get()))
except IndexError:
pass
def remove_item():
selected_items = tree.selection()[0]
tree.delete(selected_items)
def open_CSV():
with open("new.csv") as myfile:
csvread = csv.reader(myfile,delimiter=",")
for i in csvread:
print(i)
tree = ttk.Treeview(root,height=25,selectmode=EXTENDED)
tree["columns"]=("one","two","three","four")
tree.column("one",width=120)
tree.column("two",width=160)
tree.column("three",width=130)
tree.column("four",width=160)
tree.heading("one", text="Numer seryjny leku")
tree.heading("two", text="Nazwa Leku")
tree.heading("three", text="Ilość ampułek")
tree.heading("four",text="Data ważności")
tree["show"]="headings"
root.mainloop()
Upvotes: 0
Views: 6795
Reputation: 142681
Here is minimal working code without not important functions, variables, modules but with some example data at start.
Main element is
for row_id in tree.get_children():
row = tree.item(row_id)['values']
csvwriter.writerow(row)
import tkinter as tk # PEP8: `import *` is not preferred
from tkinter import ttk
import csv
# --- functions ----
def load_csv():
with open("new.csv") as myfile:
csvread = csv.reader(myfile, delimiter=',')
for row in csvread:
print('load row:', row)
tree.insert("", 'end', values=row)
def save_csv():
with open("new.csv", "w", newline='') as myfile:
csvwriter = csv.writer(myfile, delimiter=',')
for row_id in tree.get_children():
row = tree.item(row_id)['values']
print('save row:', row)
csvwriter.writerow(row)
# --- main ---
root = tk.Tk()
tree = ttk.Treeview(root, height=25, selectmode='extended')
tree.pack()
tree["columns"] = ("one", "two", "three", "four")
tree.column("one", width=120)
tree.column("two", width=160)
tree.column("three", width=130)
tree.column("four", width=160)
tree.heading("one", text="Numer seryjny leku")
tree.heading("two", text="Nazwa Leku")
tree.heading("three", text="Ilość ampułek")
tree.heading("four", text="Data ważności")
tree["show"] = "headings"
button_load = tk.Button(root, text='Load', command=load_csv)
button_load.pack()
button_save = tk.Button(root, text='Save', command=save_csv)
button_save.pack()
# add some data for test
tree.insert("", 'end', values=[1, "A", "B", "C"])
tree.insert("", 'end', values=[2, "X", "Y", "Z"])
root.mainloop()
BTW: See PEP 8 -- Style Guide for Python Code
Upvotes: 2