2015-11-11 1 views
0

Итак, этот код является фрагментом гораздо большего. То, что я хочу сделать, это записать в новую строку CSV-файла, информацию в списке addEv, каждый тип информации (eventDate, eventTitle, eventType, eventDescription) в новой ячейке. До сих пор он работает, но он создает 4 строки с одинаковыми значениями и, если есть какие-либо существующие события, сохраненные уже в CSV-файле, он удаляет их.Запись в CSV делает 4 копии и удаляет предыдущие существующие файлы

#PLANNER 
from tkinter import * 
import tkinter 
from csv import* 
import csv 

colW=['#000000','#f9f4bd','#fff200','black','#2378c8','#ed1c24'] 
colSch=colW 

addEv=['date','title','eventtype','description'] 

#Page Commands 
settings=False 
addEvent=False 
accessDayPage=False 
ttt=False 
bbb=False 



sdDay=False 
smMonth=False 
syYear=False 
icExistance=False 
eventsCreated=False 
go=False 


      #addEvent 

def destroyaddEvent(): 
    global addEvent,icExistance 
    if addEvent==True: 
     enterDate.destroy() 
     days.destroy() 
     months.destroy() 
     years.destroy() 
     searchDate.destroy() 
     yYear.destroy() 
     mMonth.destroy() 
     dDay.destroy() 
     eEvent.destroy() 
     evTitleField.destroy() 
     evType.destroy() 
     evDescriptionField.destroy() 
     if icExistance==True: 
      evIc.destroy() 
      icExistance=False 
     addEvent=False 

def daySet(): 
    global dDay,sdDay 
    if sdDay==True: 
     dDay.destroy() 
     sdDay=False 
    dDay=tkinter.Label(main,text=str(dayVar.get()),fg=colSch[3],bg=colSch[1],font=("MingLiU","14")) 
    dDay.place(x=480,y=60) 
    sdDay=True 

def monthSet(): 
    global mMonth,smMonth 
    if smMonth==True: 
     mMonth.destroy() 
     smMonth=False 
    mMonth=tkinter.Label(main,text=str(monthVar.get()),fg=colSch[3],bg=colSch[1],font=("MingLiU","14")) 
    mMonth.place(x=510,y=60) 
    smMonth=True 

def yearSet(): 
    global yYear,syYear 
    if syYear==True: 
     yYear.destroy() 
     syYear=False 
    yYear=tkinter.Label(main,text=str(yearVar.get()),fg=colSch[3],bg=colSch[1],font=("MingLiU","14")) 
    yYear.place(x=610,y=60) 
    syYear=True 

def eventSet(): 

    global evIc,icExistance,evLogo 

    if eEevType.get()==("(exam)"): 
     if icExistance==True: 
      evIc.destroy() 
      icExistance=False 
     evLogo=tkinter.PhotoImage(file="examIc.gif") 
     evIc=tkinter.Label(main,image=evLogo) 
     evIc.place(x=670,y=145) 
     icExistance=True 

    elif eEevType.get()==("(birthday)"): 
     if icExistance==True: 
      evIc.destroy() 
      icExistance=False 
     evLogo=tkinter.PhotoImage(file="birthdayIc.gif") 
     evIc=tkinter.Label(main,image=evLogo) 
     evIc.place(x=670,y=145) 
     icExistance=True 

    elif eEevType.get()==("(meeting)"): 
     if icExistance==True: 
      evIc.destroy() 
      icExistance=False 
     evLogo=tkinter.PhotoImage(file="meetingIc.gif") 
     evIc=tkinter.Label(main,image=evLogo) 
     evIc.place(x=670,y=145) 
     icExistance=True 

    elif eEevType.get()==("(school trip)"): 
     if icExistance==True: 
      evIc.destroy() 
      icExistance=False 
     evLogo=tkinter.PhotoImage(file="tripIc.gif") 
     evIc=tkinter.Label(main,image=evLogo) 
     evIc.place(x=670,y=145) 
     icExistance=True 

    elif eEevType.get()==("(coursework)"): 
     if icExistance==True: 
      evIc.destroy() 
      icExistance=False 
     evLogo=tkinter.PhotoImage(file="courseworkIc.gif") 
     evIc=tkinter.Label(main,image=evLogo) 
     evIc.place(x=670,y=145) 
     icExistance=True 




def goToDay(): 
    evDateSelected=str(dayVar.get()+monthVar.get()+yearVar.get()+"'") 
    del addEv[0] 
    addEv.insert(0,evDateSelected) 

    del addEv[1] 
    addEv.insert(1,evTitleField.get()) 

    del addEv[2] 
    addEv.insert(2,eEevType.get()) 

    del addEv[3] 
    addEv.insert(3,evDescriptionField.get("1.0",'end-1c')) 

    print (addEv) 
    eventsFile=open("dayFile.csv","w",newline='') 
    evWriter=csv.writer(eventsFile) 
    for i in addEv: 
     evWriter.writerows([addEv]) 



def addEvent(): 
    destroyaddEvent() 

    global enterDate,addEvent,evDescriptionField,days,months,years,searchDate,dayVar,monthVar,yearVar,dDay,mMonth,yYear,evTitleField,eEevType,eEvent,evType 

    enterDate=tkinter.Label(main,text="Please enter date (dd/mm/yyyy):",fg=colSch[5],bg=colSch[0],font=("MingLiU","14")) 
    enterDate.place(x=140,y=20) 


    days=tkinter.Menubutton(main,text="DD",relief=RAISED,width=5,height=1, font=("Dotum","11")) 
    days.place(x=480,y=20) 
    days.menu=tkinter.Menu(days,tearoff=0) 
    days['menu']=days.menu 

    dayVar=StringVar() 
    days.menu.add_radiobutton(label=str(1),variable=dayVar,value=str(1),command=daySet) 
    days.menu.add_radiobutton(label=str(2),variable=dayVar,value=str(2),command=daySet) 
    days.menu.add_radiobutton(label=str(3),variable=dayVar,value=str(3),command=daySet) 
    days.menu.add_radiobutton(label=str(4),variable=dayVar,value=str(4),command=daySet) 
    days.menu.add_radiobutton(label=str(5),variable=dayVar,value=str(5),command=daySet) 
    days.menu.add_radiobutton(label=str(6),variable=dayVar,value=str(6),command=daySet) 
    days.menu.add_radiobutton(label=str(7),variable=dayVar,value=str(7),command=daySet) 
    days.menu.add_radiobutton(label=str(8),variable=dayVar,value=str(8),command=daySet) 
    days.menu.add_radiobutton(label=str(9),variable=dayVar,value=str(9),command=daySet) 
    days.menu.add_radiobutton(label=str(10),variable=dayVar,value=str(10),command=daySet) 
    days.menu.add_radiobutton(label=str(11),variable=dayVar,value=str(11),command=daySet) 
    days.menu.add_radiobutton(label=str(12),variable=dayVar,value=str(12),command=daySet) 
    days.menu.add_radiobutton(label=str(13),variable=dayVar,value=str(13),command=daySet) 
    days.menu.add_radiobutton(label=str(14),variable=dayVar,value=str(14),command=daySet) 
    days.menu.add_radiobutton(label=str(15),variable=dayVar,value=str(15),command=daySet) 
    days.menu.add_radiobutton(label=str(16),variable=dayVar,value=str(16),command=daySet) 
    days.menu.add_radiobutton(label=str(17),variable=dayVar,value=str(17),command=daySet) 
    days.menu.add_radiobutton(label=str(18),variable=dayVar,value=str(18),command=daySet) 
    days.menu.add_radiobutton(label=str(19),variable=dayVar,value=str(19),command=daySet) 
    days.menu.add_radiobutton(label=str(20),variable=dayVar,value=str(20),command=daySet) 
    days.menu.add_radiobutton(label=str(21),variable=dayVar,value=str(21),command=daySet) 
    days.menu.add_radiobutton(label=str(22),variable=dayVar,value=str(22),command=daySet) 
    days.menu.add_radiobutton(label=str(23),variable=dayVar,value=str(23),command=daySet) 
    days.menu.add_radiobutton(label=str(24),variable=dayVar,value=str(24),command=daySet) 
    days.menu.add_radiobutton(label=str(25),variable=dayVar,value=str(25),command=daySet) 
    days.menu.add_radiobutton(label=str(26),variable=dayVar,value=str(26),command=daySet) 
    days.menu.add_radiobutton(label=str(27),variable=dayVar,value=str(27),command=daySet) 
    days.menu.add_radiobutton(label=str(28),variable=dayVar,value=str(28),command=daySet) 
    days.menu.add_radiobutton(label=str(29),variable=dayVar,value=str(29),command=daySet) 
    days.menu.add_radiobutton(label=str(30),variable=dayVar,value=str(30),command=daySet) 
    days.menu.add_radiobutton(label=str(31),variable=dayVar,value=str(31),command=daySet) 


    months=Menubutton(main,text="MM",relief=RAISED,width=5,height=1, font=("Dotum","11")) 
    months.place(x=540,y=20) 
    months.menu=tkinter.Menu(months,tearoff=0) 
    months['menu']=months.menu 

    monthVar=StringVar() 
    months.menu.add_radiobutton(label=str("January"),variable=monthVar,value=("January"),command=monthSet) 
    months.menu.add_radiobutton(label=str("February"),variable=monthVar,value=("February"),command=monthSet) 
    months.menu.add_radiobutton(label=str("March"),variable=monthVar,value=("March"),command=monthSet) 
    months.menu.add_radiobutton(label=str("April"),variable=monthVar,value=("April"),command=monthSet) 
    months.menu.add_radiobutton(label=str("May"),variable=monthVar,value=("May"),command=monthSet) 
    months.menu.add_radiobutton(label=str("June"),variable=monthVar,value=("June"),command=monthSet) 
    months.menu.add_radiobutton(label=str("July"),variable=monthVar,value=("July"),command=monthSet) 
    months.menu.add_radiobutton(label=str("August"),variable=monthVar,value=("August"),command=monthSet) 
    months.menu.add_radiobutton(label=str("September"),variable=monthVar,value=("September"),command=monthSet) 
    months.menu.add_radiobutton(label=str("October"),variable=monthVar,value=("October"),command=monthSet) 
    months.menu.add_radiobutton(label=str("November"),variable=monthVar,value=("November"),command=monthSet) 
    months.menu.add_radiobutton(label=str("December"),variable=monthVar,value=("December"),command=monthSet) 


    years=Menubutton(main,text="YYYY",relief=RAISED,width=5,height=1, font=("Dotum","11")) 
    years.place(x=600,y=20) 
    years.menu=tkinter.Menu(years,tearoff=0) 
    years['menu']=years.menu 

    yearVar=StringVar() 
    years.menu.add_radiobutton(label=str("2015"),variable=yearVar,value=("2015"),command=yearSet) 
    years.menu.add_radiobutton(label=str("2016"),variable=yearVar,value=("2016"),command=yearSet) 
    years.menu.add_radiobutton(label=str("2017"),variable=yearVar,value=("2017"),command=yearSet) 
    years.menu.add_radiobutton(label=str("2018"),variable=yearVar,value=("2018"),command=yearSet) 
    years.menu.add_radiobutton(label=str("2019"),variable=yearVar,value=("2019"),command=yearSet) 
    years.menu.add_radiobutton(label=str("2020"),variable=yearVar,value=("2020"),command=yearSet) 
    years.menu.add_radiobutton(label=str("2021"),variable=yearVar,value=("2021"),command=yearSet) 
    years.menu.add_radiobutton(label=str("2022"),variable=yearVar,value=("2022"),command=yearSet) 


    searchDate=tkinter.Button(main,text="CREATE",bg=colSch[2],fg=colSch[5],font=("Dotum","14"),command=goToDay) 
    searchDate.place(x=680,y=38) 

    dDay=tkinter.Label(main,text='.',fg=colSch[0],bg=colSch[0],font=("MingLiU","1")) 
    dDay.place(x=600,y=400) 
    mMonth=tkinter.Label(main,text='.',fg=colSch[0],bg=colSch[0],font=("MingLiU","1")) 
    mMonth.place(x=600,y=400) 
    yYear=tkinter.Label(main,text='.',fg=colSch[0],bg=colSch[0],font=("MingLiU","1")) 
    yYear.place(x=600,y=400) 
    eEvent=tkinter.Label(main,text='.',fg=colSch[0],bg=colSch[0],font=("MingLiU","1")) 
    eEvent.place(x=600,y=400) 



    evTitleField=tkinter.Entry(main,width=85) 
    evTitleField.place(x=140,y=115) 

    evType=Menubutton(main,text="Event Type",relief=RAISED, font=("Dotum","11")) 
    evType.place(x=680,y=115) 
    evType.menu=tkinter.Menu(evType,tearoff=0) 
    evType['menu']=evType.menu 


    eEevType=StringVar() 
    evType.menu.add_radiobutton(label=str("Birthday"),variable=eEevType,value=("(birthday)"),command=eventSet) 
    evType.menu.add_radiobutton(label=str("Exam"),variable=eEevType,value=("(exam)"),command=eventSet) 
    evType.menu.add_radiobutton(label=str("School trip"),variable=eEevType,value=("(school trip)"),command=eventSet) 
    evType.menu.add_radiobutton(label=str("Coursework"),variable=eEevType,value=("(coursework)"),command=eventSet) 
    evType.menu.add_radiobutton(label=str("Meeting"),variable=eEevType,value=("(meeting)"),command=eventSet) 

    evDescriptionField= Text(main,width=64,height=12) 
    evDescriptionField.place(x=140,y=140) 






    addEvent=True 

main=tkinter.Tk() 
main.configure(bg=colSch[0]) 
main.geometry('780x375') 
w=Canvas(main,width=780,height=375) 
w.pack() 
rect1=w.create_rectangle(0,0,775,375,fill=colSch[0]) 
rect2=w.create_rectangle(0,0,120,375,fill=colSch[1]) 


cal=tkinter.Button(main,text="Add Event",bg=colSch[2],fg=colSch[4],width=15,height=3,relief=FLAT, font=("Bernard MT Condensed","11"),command=addEvent) 
cal.place(x=5,y=80) 





main.mainloop() 

Намерение создать файл CSV с различными событиями, такими как: enter image description here

PS: Я знаю, Theres много улучшений, которые можно было бы сделать с форматированием, но это мой первый год в кодировании.

Код: Франциско Хавьер Лопес-Эрнандес.

ответ

0

Проблема (ы) из-за этот код в goToDay() функции:

eventsFile=open("dayFile.csv","w",newline='') 
evWriter=csv.writer(eventsFile) 
for i in addEv: 
    evWriter.writerows([addEv]) 

... потому что addEv имеет 4 пунктов в нем, и каждый раз, когда функция вызывается его перезаписывает файл с нуля и выводит ту же строку данных (текущие 4 элемента в списке) for i in addEv: (4) раза.

Я не уверен, как это исправить, потому что мне непонятно, что вы хотите. Между тем, я предлагаю вам отдохнуть от кодирования и потратить еще некоторое время на изучение петель Python for. В вашем коде есть несколько мест, где их использование значительно упростит и сократит ваш код (хотя это не имеет ничего общего с проблемой в вашем вопросе).

Смежные вопросы