class Window(Tk): def __init__(self): super().__init__() self.title("Work Helper") # automatic sizing of the elements self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) # création des différents frames de l'interface self.btn_frame = Frame(self) self.btn_frame.pack(fill=X) # add label frame to list ongoing day projects name from sheet.mainlist self.proj_list_frame = Frame(self) self.proj_list_frame.pack(fill=X) self.proj_frame = Frame(self) self.proj_frame.pack(fill=X) self.words_frame = Frame(self) self.words_frame.pack(fill=X) self.submit = Frame(self) self.submit.pack(fill=X) self.save_file_frame = Frame(self) self.save_file_frame.pack(fill=X) self.stop_btn_frame = Frame(self) self.stop_btn_frame.pack(fill=X) # Top buttons self.btn_new = Button(self.btn_frame, text='New month', command=self.new_worksheet) self.btn_new.pack(side=LEFT) self.btn_load = Button(self.btn_frame, text='Open', command=self.open_file) self.btn_load.pack(side=LEFT) # List of proj of the day self.display_day_accounts = Label(self.proj_list_frame) self.display_day_accounts.pack(anchor=CENTER) # Input names self.input_project_name = Label(self.proj_frame, text="Project") self.input_project_name.pack(side=LEFT) self.input_words_name = Label(self.words_frame, text="Words") self.input_words_name.pack(side=LEFT) # input fields self.input_project_field = Entry(self.proj_frame) self.input_project_field.pack(side=RIGHT, fill=X) self.input_words_field = Entry(self.words_frame) self.input_words_field.pack(side=RIGHT, fill=X) # submit frame self.btn_submit = Button(self.submit, text='Submit', command=self.submit_info) self.btn_submit.pack() # save file frame self.btn_save = Button(self.save_file_frame, text='Save', command=self.save_proj) self.btn_save.pack(side=LEFT) # save status self.save_status = Label(self.save_file_frame) self.save_status.pack(side=RIGHT) # bouton d'arrêt self.btn_exit = Button(self.stop_btn_frame, text='exit', command=self.destroy) self.btn_exit.pack() # it's own sheet object self.sheet = Sheet("") # stamp to check if the file changed self.day_total_base = 0 self.to_save_or_not_to_save = False self.is_it_new = False def new_worksheet(self): self.sheet = Sheet("Jeb") self.is_it_new = True def open_file(self): # get the file existing_file = askopenfilename(title="Select file.") self.sheet = Sheet("Jeb") # call Sheet read function self.sheet.read_file(month, year, existing_file) self.display_day_accounts['text'] = "Accounts of the day\n{}".format( self.get_day_projects()) self.day_total_base = self.sheet.total_day(today) def submit_info(self): new_proj = self.input_project_field.get() new_words = self.input_words_field.get() if self.is_it_new: filename = asksaveasfilename() self.sheet.from_scratch(day, month, year, new_proj, new_words, filename) self.is_it_new = False self.open_file() else: self.sheet.update_file(day, month, new_proj, new_words) # need field to go back to blank self.input_project_field.delete(0, END) self.input_words_field.delete(0, END) self.display_day_accounts['text'] = "" self.display_day_accounts['text'] = "Accounts of the month\n" \ "{}".format(self.get_day_projects()) if self.day_total_base != self.sheet.total_day(today): self.to_save_or_not_to_save = True self.get_save_status() def get_day_projects(self): long_string = "" proj_counter = 0 for i in self.sheet.main_list: if proj_counter % 3 != 0 or proj_counter == 0: long_string += "{}, ".format(i.get_name()) proj_counter += 1 else: long_string += "{},\n ".format(i.get_name()) proj_counter += 1 return long_string def save_proj(self): filename = asksaveasfilename() self.sheet.save_file(day, month, year, filename) self.to_save_or_not_to_save = False self.get_save_status() def get_save_status(self): if self.to_save_or_not_to_save: self.save_status['text'] = "GOTTA SAVE!! " else: self.save_status['text'] = "Nothing new here "