from tkinter import * from functools import partial from datetime import date import all_constants as c class HistoryExport: # displays history and export dialogue box def __init__(self, partner, calculations): self.history_box = Toplevel() partner.to_history_button.config(state=DISABLED) self.history_box.protocol("WM_DELETE_WINDOW", partial(self.close_history, partner)) self.history_frame = Frame(self.history_box) self.history_frame.grid() recent_intro_txt = "Below are all your calculations." newest_first_string = "" newest_first_list = list(reversed(calculations)) for item in newest_first_list[:-1]: newest_first_string += item + "\n" newest_first_string += newest_first_list[-1] export_instruction_txt = ("Please push to save your " "calculations in a text file. " "If the filename already exists, " "it will be overwritten!") history_labels_list = [ ["History / Export", ("Arial", "16", "bold"), None], [recent_intro_txt, ("Arial", "11"), None], [newest_first_string, ("Arial", "14"), None], [export_instruction_txt, ("Arial", "11"), None] ] history_label_ref = [] for count, item in enumerate(history_labels_list): make_label = Label(self.history_box, text=item[0], font=item[1], bg=item[2], wraplength=300, justify="left", pady=10, padx=20) make_label.grid(row=count) history_label_ref.append(make_label) self.export_filename_label = history_label_ref[3] self.hist_button_frame = Frame(self.history_box) self.hist_button_frame.grid(row=4) button_details_list = [ ["Export", "#004C99", lambda: self.export_date(calculations), 0, 0], ["Close", "#666666", partial(self.close_history, partner), 0, 1] ] for btn in button_details_list: make_button = Button(self.hist_button_frame, font=("Arial", "12", "bold"), text=btn[0], bg=btn[1], fg="#FFFFFF", width=12, command=btn[2]) make_button.grid(row=btn[3], column=btn[4], padx=10, pady=10) def export_date(self, calculations): # exports history to a dated text file today = date.today() day = today.strftime("%d") month = today.strftime("%m") year = today.strftime("%Y") file_name = f"currency_{year}_{month}_{day}" success_string = (f"Export Successful! The file is called " f"{file_name}.txt") self.export_filename_label.config(bg="#00990", text=success_string) write_to = f"{file_name}.txt" with open(write_to, "w") as text_file: text_file.write("**** Currency Calculations ****\n") text_file.write(f"Generated: {day}/{month}/{year}\n\n") text_file.write("Here is your calculation history " "(oldest to newest)...\n") for item in calculations: text_file.write(item) text_file.write("\n") def close_history(self, partner): # closes history window and re-enables history button partner.to_history_button.config(state=NORMAL) self.history_box.destroy()