Source code for interface.model_details

"""
Frontend Model Details Page File for AGE-ABM Visual Interface
@Author Meghan Ireland
@Co-Authors Max Hall and Matthew Fleischman

"""

import tkinter as tk
import customtkinter

[docs] class Details: """Defines widgets and functionality of model details page. """ def __init__(self, ec_app_ui): """Creates all variables and widgets for the model details page. """ self.ec_app_ui = ec_app_ui self.agents = [] self.parameters = [] self.current_initial_parameter = "" self.is_agent = True ### Titles ### self.label_details_title = tk.Label(self.ec_app_ui.title_frame, text="Model details" , font=self.ec_app_ui.font1,bg=self.ec_app_ui.title_colour , fg=self.ec_app_ui.label_text_colour) ### Labels ### self.label_details_set_seed = tk.Label(self.ec_app_ui.page_frame, text="Set Seed:" , font=self.ec_app_ui.font2,bg=self.ec_app_ui.frame_colour ,fg=self.ec_app_ui.label_text_colour) self.label_details_set_iterations = tk.Label(self.ec_app_ui.page_frame , text="Set number of iterations:", font=self.ec_app_ui.font2 , bg=self.ec_app_ui.frame_colour,fg=self.ec_app_ui.label_text_colour) self.label_details_agent_parameters = tk.Label(self.ec_app_ui.page_frame , text="For Agent: , enter the number of :", font=self.ec_app_ui.font2 , bg=self.ec_app_ui.frame_colour,fg=self.ec_app_ui.label_text_colour) self.label_details_intial_value = tk.Label(self.ec_app_ui.page_frame, text="Initial Value: " , font=self.ec_app_ui.font2,bg=self.ec_app_ui.frame_colour , fg=self.ec_app_ui.label_text_colour) ### Entry ### self.entry_details_set_seed = customtkinter.CTkEntry(self.ec_app_ui.page_frame , font = self.ec_app_ui.font2, height=self.ec_app_ui.entry_height , width = self.ec_app_ui.entry_width, fg_color = self.ec_app_ui.entry_colour , text_color = self.ec_app_ui.entry_text_colour) self.entry_details_set_iterations = customtkinter.CTkEntry(self.ec_app_ui.page_frame , font = self.ec_app_ui.font2, height=self.ec_app_ui.entry_height , width = self.ec_app_ui.entry_width,fg_color = self.ec_app_ui.entry_colour , text_color = self.ec_app_ui.entry_text_colour) self.entry_details_initial_value = customtkinter.CTkEntry(self.ec_app_ui.page_frame , font = self.ec_app_ui.font2, height=self.ec_app_ui.entry_height , width = self.ec_app_ui.entry_width, fg_color = self.ec_app_ui.entry_colour , text_color = self.ec_app_ui.entry_text_colour) ### Buttons ### self.button_details_save = customtkinter.CTkButton(self.ec_app_ui.page_frame , text="✔️ Save Details", command=self.btn_details_save , fg_color=self.ec_app_ui.comp_btn_colour, font = self.ec_app_ui.font2 , height=self.ec_app_ui.entry_height, width = self.ec_app_ui.entry_width) self.button_details_save_initial_value = customtkinter.CTkButton(self.ec_app_ui.page_frame , text="✔️ Save", command=self.btn_details_save_initial_value, fg_color=self.ec_app_ui.comp_btn_colour, font = self.ec_app_ui.font2 , height=self.ec_app_ui.entry_height, width = self.ec_app_ui.entry_width)
[docs] def clear_details(self): """Clears all the visual elements of the table """ self.label_details_title.grid_forget() self.label_details_set_seed.grid_forget() self.entry_details_set_seed.grid_forget() self.label_details_set_iterations.grid_forget() self.entry_details_set_iterations.grid_forget() self.button_details_save.grid_forget() self.label_details_agent_parameters.grid_forget() self.label_details_intial_value.grid_forget() self.entry_details_initial_value.grid_forget() self.button_details_save_initial_value.grid_forget()
### Details Tab ###
[docs] def details_tab_btn(self): """Places widgets when user opens model details page. """ self.ec_app_ui.clear_all() self.label_details_title.grid(row = 0, column = 0) self.entry_details_set_iterations.delete(0,'end') self.entry_details_set_seed.delete(0,'end') self.label_details_set_seed.grid(row = 0, column = 0,padx = 150,pady = 5,sticky="W") self.entry_details_set_seed.grid(row = 0, column = 1,pady = 5) self.label_details_set_iterations.grid(row = 1, column = 0,padx = 150,pady = 5,sticky="W") self.entry_details_set_iterations.grid(row = 1, column = 1,pady = 5) self.button_details_save.grid(row = 2, column = 1,pady = 5)
[docs] def btn_details_save(self): """Save details about model to the backend """ seed = self.entry_details_set_seed.get() iterations = self.entry_details_set_iterations.get() self.agents = self.ec_app_ui.new_model.get_model_details().get_list_num_agents() self.parameters = self.ec_app_ui.new_model.get_model_details().get_list_initial_parameters() if seed == "": seed = None self.ec_app_ui.new_model.edit_model_details(sim_seed=seed, sim_length=iterations) self.current_initial_parameter = self.agents.pop(0) header = "Enter The Initial Number of "+(self.current_initial_parameter)+" Agents:" self.label_details_agent_parameters.config(text=header) self.is_agent = True self.label_details_agent_parameters.grid(row = 3, column = 0,padx = 150,pady = 5,sticky="W" , columnspan=2) self.label_details_intial_value.grid(row = 4, column = 0,padx = 150,pady = 5,sticky="W") self.entry_details_initial_value.grid(row = 4, column = 1,pady = 5) self.button_details_save_initial_value.grid(row = 5, column = 1,pady = 5) self.button_details_save.grid_forget()
[docs] def btn_details_save_initial_value(self): """Saves the intial value of the given initial value """ value_num = self.entry_details_initial_value.get() model_details = self.ec_app_ui.new_model.get_model_details() if self.is_agent: model_details.edit_num_agent(self.current_initial_parameter, value_num) else: model_details.edit_initial_parameter(self.current_initial_parameter , initial_parameter_value = value_num) self.entry_details_initial_value.delete(0, 'end') if len(self.agents)>0: header = f"Enter The Initial Number of {self.agents[0]} Agents:" self.label_details_agent_parameters.config(text=header) self.current_initial_parameter = self.agents.pop(0) self.label_details_intial_value.grid(row = 4, column = 0,padx = 150,pady = 5,sticky="W") self.entry_details_initial_value.grid(row = 4, column = 1,pady = 5) self.button_details_save_initial_value.grid(row = 5, column = 1,pady = 5) self.is_agent = True elif len(self.parameters)>0: header = f"Enter The Initial Value For {self.parameters[0]}" self.label_details_agent_parameters.config(text=header) self.current_initial_parameter = self.parameters.pop(0) self.label_details_intial_value.grid(row = 4, column = 0,padx = 150,pady = 5,sticky="W") self.entry_details_initial_value.grid(row = 4, column = 1,pady = 5) self.button_details_save_initial_value.grid(row = 5, column = 1,pady = 5) self.is_agent = False else: self.ec_app_ui.compile.compile_tab_btn()