Source code for interface.components

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

"""

import tkinter as tk
from tkinter import ttk
import customtkinter

[docs] class Components: """Defines widgets and functionality of components page. """ def __init__(self, ec_app_ui): self.ec_app_ui = ec_app_ui self.attr_number = 0 self.user_value = tk.BooleanVar() self.primitive_types = ["int", "float", "bool"] self.selected_primitive = tk.StringVar() self.selected_primitive.set(self.primitive_types[0]) self.class_component = tk.BooleanVar() self.selected_level = tk.StringVar() self.frame_small = tk.Frame(master = self.ec_app_ui.page_frame, bg=self.ec_app_ui.frame_colour , height = self.ec_app_ui.button_height , width = 3*self.ec_app_ui.button_width//2) ### Titles ### self.label_components_title = tk.Label(self.ec_app_ui.title_frame, text="Components" , font=self.ec_app_ui.font1 , bg=self.ec_app_ui.title_colour , fg=self.ec_app_ui.label_text_colour) self.label_components_add_new = tk.Label(self.ec_app_ui.title_frame , text="Add New Component" , font=self.ec_app_ui.font1 , fg = self.ec_app_ui.label_text_colour ,bg=self.ec_app_ui.title_colour) self.label_components_edit = tk.Label(self.ec_app_ui.title_frame, text="Edit Component" , font=self.ec_app_ui.font1 , fg = self.ec_app_ui.label_text_colour ,bg=self.ec_app_ui.title_colour) ### Labels ### self.label_components_name = tk.Label(self.ec_app_ui.page_frame, text="Component Name:" , font=self.ec_app_ui.font2, justify="left" , bg=self.ec_app_ui.frame_colour , fg=self.ec_app_ui.label_text_colour) self.label_components_description = tk.Label(self.ec_app_ui.page_frame, text="Description:" , font=self.ec_app_ui.font2, justify="left" , bg=self.ec_app_ui.frame_colour , fg=self.ec_app_ui.label_text_colour) self.label_components_add_attribute = tk.Label(self.ec_app_ui.page_frame , text="Add Attribute "+str(self.attr_number) , font=self.ec_app_ui.font3_underlined , justify="left",bg=self.ec_app_ui.frame_colour , fg=self.ec_app_ui.label_text_colour) self.label_components_attribute_name = tk.Label(self.ec_app_ui.page_frame , text="Attribute Name:" , font=self.ec_app_ui.font2 , justify="left" , bg=self.ec_app_ui.frame_colour ,fg=self.ec_app_ui.label_text_colour) self.label_components_attribute_type = tk.Label(self.ec_app_ui.page_frame , text="Attribute Type:" , font=self.ec_app_ui.font2 , justify="left" , bg=self.ec_app_ui.frame_colour , fg=self.ec_app_ui.label_text_colour) self.label_components_attribute_default = tk.Label(self.ec_app_ui.page_frame , text="Attribute Default\nValue:" , font=self.ec_app_ui.font2 , justify="left" , bg=self.ec_app_ui.frame_colour , fg=self.ec_app_ui.label_text_colour) self.label_components_attribute_layer = tk.Label(self.ec_app_ui.page_frame , text="At which layer:" , font=self.ec_app_ui.font2 , justify="left" , bg=self.ec_app_ui.frame_colour , fg=self.ec_app_ui.label_text_colour) ### Entry ### self.entry_components_name = 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_components_description = 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_components_attribute_name = 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_components_attribute_default = customtkinter.CTkTextbox(self.ec_app_ui.page_frame , font = self.ec_app_ui.font2, height = 4*self.ec_app_ui.entry_height , fg_color = self.ec_app_ui.entry_colour,width = self.ec_app_ui.entry_width , text_color = self.ec_app_ui.entry_text_colour) ### Dropdown ### self.dropdown_components_attribute_type = customtkinter.CTkOptionMenu(self.ec_app_ui.page_frame , variable = self.selected_primitive,values=self.primitive_types , fg_color = self.ec_app_ui.dropdown_menu_color , button_color=self.ec_app_ui.comp_btn_colour , button_hover_color= self.ec_app_ui.highlight_colour , height = self.ec_app_ui.entry_height, width=self.ec_app_ui.entry_width , font = self.ec_app_ui.font2) self.dropdown_components_attribute_layer = customtkinter.CTkOptionMenu(self.ec_app_ui.page_frame , variable = self.selected_level, values = ["This Layer", "Agent Layer", "Model Layer"] , fg_color = self.ec_app_ui.dropdown_menu_color , button_color=self.ec_app_ui.comp_btn_colour , button_hover_color= self.ec_app_ui.highlight_colour , height = self.ec_app_ui.entry_height, width=self.ec_app_ui.entry_width , font = self.ec_app_ui.font2 , command = self.on_user_click) ### Buttons ### self.button_components_add = customtkinter.CTkButton(self.frame_small , hover_color=self.ec_app_ui.highlight_colour , text="Add", command=self.btn_components_add,fg_color=self.ec_app_ui.comp_btn_colour , font = self.ec_app_ui.font2, height=self.ec_app_ui.button_height , width=self.ec_app_ui.button_width/2) self.button_components_edit = customtkinter.CTkButton(self.frame_small , hover_color=self.ec_app_ui.highlight_colour, text="Edit" , command=self.btn_components_edit, fg_color=self.ec_app_ui.comp_btn_colour , font = self.ec_app_ui.font2, height=self.ec_app_ui.button_height , width=self.ec_app_ui.button_width/2) self.button_components_remove = customtkinter.CTkButton(self.frame_small , hover_color=self.ec_app_ui.highlight_colour, text="Remove" , command=self.btn_components_remove, fg_color=self.ec_app_ui.comp_btn_colour , font = self.ec_app_ui.font2, height=self.ec_app_ui.button_height , width=self.ec_app_ui.button_width/2) self.button_components_save = customtkinter.CTkButton(self.ec_app_ui.page_frame , hover_color=self.ec_app_ui.highlight_colour, text="Save Component" , command=self.btn_components_save, fg_color=self.ec_app_ui.comp_btn_colour , font = self.ec_app_ui.font2, height = self.ec_app_ui.button_height , width = self.ec_app_ui.entry_width) self.button_components_save_attribute = customtkinter.CTkButton(self.ec_app_ui.page_frame , hover_color=self.ec_app_ui.highlight_colour, text="Save Attribute" , command=self.btn_components_save_attribute, fg_color=self.ec_app_ui.comp_btn_colour , font = self.ec_app_ui.font2,height = self.ec_app_ui.button_height , width = self.ec_app_ui.entry_width) self.button_components_add_new_attribute = customtkinter.CTkButton(self.ec_app_ui.page_frame , hover_color=self.ec_app_ui.highlight_colour, text="➕Add New Attribute" , command=self.btn_components_add_new_attribute, fg_color=self.ec_app_ui.comp_btn_colour , font = self.ec_app_ui.font2,height = self.ec_app_ui.button_height , width = self.ec_app_ui.entry_width) self.button_components_complete_component = customtkinter.CTkButton(self.ec_app_ui.page_frame , hover_color=self.ec_app_ui.highlight_colour, text="✔️Component Complete" , command=self.btn_components_complete_component , fg_color=self.ec_app_ui.comp_btn_colour, font = self.ec_app_ui.font2 , height = self.ec_app_ui.button_height, width = self.ec_app_ui.entry_width) self.button_components_save_edited = customtkinter.CTkButton(self.ec_app_ui.page_frame , hover_color=self.ec_app_ui.highlight_colour,text="Save Component" , command=self.btn_components_save_edited, fg_color=self.ec_app_ui.comp_btn_colour , font = self.ec_app_ui.font2, height = self.ec_app_ui.button_height , width = self.ec_app_ui.entry_width) self.button_components_save_attribute_added = customtkinter.CTkButton(self.ec_app_ui.page_frame , hover_color=self.ec_app_ui.highlight_colour, text="Save Attribute" , command=self.btn_components_save_attribute_added , fg_color=self.ec_app_ui.comp_btn_colour, font = self.ec_app_ui.font2 , height = self.ec_app_ui.button_height, width = self.ec_app_ui.entry_width) self.button_components_add_new_attribute_edit = customtkinter.CTkButton(self.ec_app_ui.page_frame , hover_color=self.ec_app_ui.highlight_colour, text="➕Add New Attribute" , command=self.btn_components_add_new_attribute_edit , fg_color=self.ec_app_ui.comp_btn_colour, font = self.ec_app_ui.font2 ,height = self.ec_app_ui.button_height, width = self.ec_app_ui.entry_width) ### Checkboxes ### self.checkbox_components_class_comp = customtkinter.CTkCheckBox(self.ec_app_ui.page_frame , border_color=self.ec_app_ui.tbl_colour, font = self.ec_app_ui.font2 , text_color = self.ec_app_ui.button_font_colour , hover_color=self.ec_app_ui.highlight_colour , variable=self.class_component, text = "Class Component" , fg_color = self.ec_app_ui.check_color) ### Table for Components ### ttk.Style().configure("Treeview", background=self.ec_app_ui.tbl_colour , foreground=self.ec_app_ui.tbl_font_colour) style = ttk.Style() style.theme_use('clam') style.configure('Treeview', rowheight=40) self.comp_frame = customtkinter.CTkFrame(self.ec_app_ui.page_frame , fg_color=self.ec_app_ui.tbl_colour,height = 300, width = 580) self.vertical_scroll = tk.Scrollbar(self.comp_frame) self.components_tbl = ttk.Treeview(self.comp_frame, padding = 5, height = 8 , yscrollcommand=self.vertical_scroll.set) # The code below sets up the table for components self.components_tbl['columns'] = ('Component', 'Description') self.components_tbl.column("#0", width=0, stretch='NO') self.components_tbl.column("Component",anchor='center', width=190) self.components_tbl.column("Description",anchor='center',width=380) self.components_tbl.heading("#0",text="",anchor='center') self.components_tbl.heading("Component",text="Component",anchor='center') self.components_tbl.heading("Description",text="Description",anchor='center') self.components_tbl.bind("<<TreeviewSelect>>", self.display_selected_component) self.selected_components = ""
[docs] def clear_components(self): """Clears components page """ self.comp_frame.grid_forget() self.components_tbl.pack_forget() self.label_components_title.grid_forget() self.button_components_add.grid_forget() self.button_components_edit.grid_forget() self.button_components_remove.grid_forget() self.frame_small.grid_forget() self.label_components_edit.grid_forget()
[docs] def clear_add_comp(self): """Clears add component page """ self.checkbox_components_class_comp.grid_forget() self.label_components_add_new.grid_forget() self.label_components_name.grid_forget() self.entry_components_name.grid_forget() self.label_components_description.grid_forget() self.entry_components_description.grid_forget() self.button_components_save.grid_forget() self.button_components_save_edited.grid_forget() self.label_components_add_attribute.grid_forget() self.label_components_attribute_name.grid_forget() self.entry_components_attribute_name.grid_forget() self.label_components_attribute_type.grid_forget() self.dropdown_components_attribute_type.grid_forget() self.button_components_save_attribute.grid_forget() self.button_components_save_attribute_added.grid_forget() self.button_components_add_new_attribute.grid_forget() self.button_components_complete_component.grid_forget() self.label_components_attribute_default.grid_forget() self.entry_components_attribute_default.grid_forget() self.button_components_add_new_attribute_edit.grid_forget() self.label_components_attribute_layer.grid_forget() self.dropdown_components_attribute_layer.grid_forget()
[docs] def components_tab_btn(self): """This method is opened when the user clicks the component button. """ self.ec_app_ui.clear_all() id1 = 0 self.selected_components = "" ### Clears comp table ### for comp in self.components_tbl.get_children(): self.components_tbl.delete(comp) ### Adds items to components table ### for comp in self.ec_app_ui.new_model.get_list_components(): self.components_tbl.insert(parent='',index='end',iid=id1,text='', values=(comp , self.ec_app_ui.new_model.get_component(comp).get_description())) id1+=1 ### Table ### self.comp_frame.grid(row = 0,columnspan = 3,column = 0,pady = (40,5)) self.vertical_scroll.pack(side="right", fill="y", padx=(0,5), pady=5) self.components_tbl.pack(fill = "x", padx = (5,0), pady = 5) ### Add, edit, remove buttons ###### Add, edit, remove buttons ### self.frame_small.grid(row=2, column = 0, columnspan=3,pady = 5) self.button_components_add.grid(row = 0,column = 0,padx = 5) self.button_components_edit.grid(row = 0, column = 1,padx = 5) self.button_components_remove.grid(row = 0, column = 2,padx = 5) ### Page title ### self.label_components_title.grid(row = 0, column = 0)
[docs] def on_user_click(self, *args): """When user selects the combo box """ if self.dropdown_components_attribute_layer.get() == "This Layer": self.entry_components_attribute_default.delete("1.0", 'end-1c') self.label_components_attribute_default.grid(row = 8, column = 0, padx = 150 , pady = 5, sticky="W") self.entry_components_attribute_default.grid(row = 8, column = 2, pady = 5) else: self.label_components_attribute_default.grid_forget() self.entry_components_attribute_default.grid_forget()
[docs] def btn_components_save_attribute(self): """Saves attribute to component """ ### Adds attributes to component ### if not self.checkbox_components_class_comp.get(): layer = "" default_val = self.entry_components_attribute_default.get("1.0", 'end-1c') if self.dropdown_components_attribute_layer.get() == "This Layer": layer = "comp_lvl" elif self.dropdown_components_attribute_layer.get() == "Agent Layer": layer = "agent_lvl" default_val = None elif self.dropdown_components_attribute_layer.get() == "Model Layer": layer = "model_lvl" default_val = None self.ec_app_ui.new_model.add_attribute(self.entry_components_name.get() , self.entry_components_attribute_name.get() , self.selected_primitive.get(), layer, default_val) else: self.ec_app_ui.new_model.add_attribute(self.entry_components_name.get() , self.entry_components_attribute_name.get() , self.selected_primitive.get(), "model_lvl") ### Now that the new attribute has been saved we allow the user to click add new attribute ### or complete # Remove widgets: self.label_components_add_attribute.grid_forget() self.label_components_attribute_name.grid_forget() self.entry_components_attribute_name.grid_forget() self.label_components_attribute_type.grid_forget() self.dropdown_components_attribute_type.grid_forget() self.label_components_attribute_default.grid_forget() self.entry_components_attribute_default.grid_forget() self.label_components_attribute_layer.grid_forget() self.dropdown_components_attribute_layer.grid_forget() ### Add new Attribute or complete component button ### self.button_components_add_new_attribute.grid(row = 4, column = 2,pady = 5) self.button_components_complete_component.grid(row = 5, column = 2,pady = 5) self.entry_components_attribute_name.delete(0, 'end')# Clears attribute name entry field self.entry_components_attribute_default.delete("1.0", 'end-1c') self.button_components_save_attribute.grid_forget()# This removes the save attribute button
[docs] def btn_components_add_new_attribute(self): """Places the widgets to allow user to add an attribute """ self.entry_components_attribute_name.delete(0, 'end') self.entry_components_attribute_default.delete("1.0", 'end-1c') self.attr_number += 1 self.label_components_add_attribute.config(text="Add Attribute "+str(self.attr_number)) self.selected_primitive.set("int") ### Attribute name ### self.label_components_add_attribute.grid(row = 4, column = 0, padx = 150, pady = 5 , sticky="W") self.entry_components_attribute_name.delete(0,'end') self.label_components_attribute_name.grid(row = 5, column = 0, padx = 150, pady = 5 , sticky="W") self.entry_components_attribute_name.grid(row = 5, column = 2, pady = 5) ### Attribute type ### self.label_components_attribute_type.grid(row = 6, column = 0, padx = 150, pady = 5 , sticky="W") self.dropdown_components_attribute_type.grid(row = 6, column = 2, pady = 5) self.entry_components_attribute_default.delete("1.0", 'end-1c') if not self.checkbox_components_class_comp.get(): ### Attribute layer ### self.label_components_attribute_layer.grid(row = 7, column = 0, padx = 150,pady = 5 , sticky="W") self.dropdown_components_attribute_layer.set("") self.dropdown_components_attribute_layer.grid(row = 7, column = 2, pady = 5) ### Save button ### self.button_components_save_attribute.grid(row = 9, column = 2, pady = 5) self.button_components_add_new_attribute.grid_forget() self.button_components_complete_component.grid_forget()
[docs] def btn_components_save(self): """ Needs to get values in name and desc and add it to array Needs to check that name doesn't exist already """ self.selected_level = "" ### Add component to model ### self.ec_app_ui.new_model.add_component(self.entry_components_name.get(), self.entry_components_description.get(), self.class_component.get()) self.button_components_save.grid_forget() self.entry_components_name.configure(state= "disabled") self.entry_components_description.configure(state= "disabled") self.checkbox_components_class_comp.configure(state = "disabled") ### Add attribute ### self.label_components_add_attribute.grid(row = 4, column = 0,padx = 150,pady = 5,sticky="W") self.entry_components_attribute_name.delete(0,'end') ### Attribute name ### self.label_components_attribute_name.grid(row = 5, column = 0, padx = 150, pady = 5 , sticky="W") self.entry_components_attribute_name.grid(row = 5, column = 2,pady = 5) ### Attribute type ### self.label_components_attribute_type.grid(row = 6, column = 0, padx = 150, pady = 5 , sticky="W") self.dropdown_components_attribute_type.grid(row = 6, column = 2,pady = 5) self.entry_components_attribute_default.delete("1.0", 'end-1c') if not self.checkbox_components_class_comp.get(): ### Attribute layer ### self.label_components_attribute_layer.grid(row = 7, column = 0, padx = 150, pady = 5 , sticky="W") self.dropdown_components_attribute_layer.set("") self.dropdown_components_attribute_layer.grid(row = 7, column = 2, pady = 5) ### Save button ### self.button_components_save_attribute.grid(row = 9, column = 2,pady = 5)
[docs] def btn_components_complete_component(self): """Clears entry boxes """ self.entry_components_name.delete(0, 'end')# This clears the component name entry field self.entry_components_description.delete(0, 'end')# Clears component description entry field self.entry_components_attribute_default.delete("1.0", 'end-1c') self.entry_components_attribute_name.delete(0,'end') self.components_tab_btn()
[docs] def btn_components_add(self): """Places widgets which allow users to add a component """ self.ec_app_ui.clear_all() self.entry_components_name.configure(state = "normal") self.entry_components_description.configure(state = "normal") self.checkbox_components_class_comp.configure(state = "normal") self.entry_components_name.delete(0,'end') self.entry_components_description.delete(0,'end') ### Title ### self.label_components_add_new.grid(row = 0, column = 0) ### Component name ### self.label_components_name.grid(row = 0, column = 0,padx = 150,pady = 5,sticky="W") self.entry_components_name.grid(row = 0, column = 2,pady = 5) ### Component description ### self.label_components_description.grid(row=1, column = 0,padx = 150,pady = 5,sticky="W") self.entry_components_description.grid(row=1, column = 2,pady = 5) ### Class Component ### self.checkbox_components_class_comp.deselect() self.checkbox_components_class_comp.grid(row=2, column = 0,padx = 150,pady = 5,sticky="W") ### Save component ### self.button_components_save.grid(row = 3, column = 2,pady = 5) ### Change the number of attributes ### self.attr_number = 1 self.label_components_add_attribute.config(text="Add Attribute "+str(self.attr_number))
[docs] def on_selected_primitive(self): """Required method """
[docs] def btn_components_edit(self): """Places widgets to allows user to edit a component """ if self.selected_components != "": self.ec_app_ui.clear_all() self.label_components_edit.grid(row = 0, column = 0) ### Component name ## self.entry_components_name.configure(state= "normal") self.entry_components_name.delete(0, 'end') self.entry_components_name.insert(0, self.selected_components) self.entry_components_name.configure(state= "disabled") ### Component desription ### self.entry_components_description.configure(state= "normal") self.entry_components_description.delete(0, 'end') comp_model = self.ec_app_ui.new_model.get_component(str(self.selected_components)) self.entry_components_description.insert(0, comp_model.get_description()) self.checkbox_components_class_comp.configure(state= "normal") if comp_model.get_is_class_component(): self.checkbox_components_class_comp.select() else: self.checkbox_components_class_comp.deselect() self.checkbox_components_class_comp.configure(state= "disabled") ### Component name ### self.label_components_name.grid(row = 0, column = 0,padx = 150,pady = 5,sticky="W") self.entry_components_name.grid(row = 0, column = 2,pady = 5) ### Component description ### self.label_components_description.grid(row=1, column = 0, padx = 150, pady = 5, sticky="W") self.entry_components_description.grid(row=1, column = 2, pady = 5) ### Class Component ### self.checkbox_components_class_comp.grid(row=2, column = 0, padx = 150, pady = 5 , sticky="W") ### Save ### self.button_components_save_edited.grid(row = 3, column = 2, pady = 5) self.label_components_add_attribute.config(text="Add Attribute:")
[docs] def btn_components_save_edited(self): """Saves the component which the user has edited """ id1 = 0 self.ec_app_ui.new_model.edit_component(self.entry_components_name.get() , self.entry_components_description.get()) ### Clears the component table ### for comp in self.components_tbl.get_children(): self.components_tbl.delete(comp) ### Adds values to component table ### for comp in self.ec_app_ui.new_model.get_list_components(): self.components_tbl.insert(parent='',index='end' , iid=id1,text='', values=(comp , self.ec_app_ui.new_model.get_component(comp).get_description())) id1+=1 ### Remove save button ### self.button_components_save_edited.grid_forget() ### Make component name and description uneditable ### self.entry_components_name.configure(state = "disabled") self.entry_components_description.configure(state = "disabled") ### Adds buttons to add attribute and complete button ### self.button_components_add_new_attribute_edit.grid(row = 4, column = 2,pady = 5) self.button_components_complete_component.grid(row = 5, column = 2,pady = 5)
[docs] def btn_components_save_attribute_added(self): """Saves a new attribute added to the component on editing """ if not self.checkbox_components_class_comp.get(): layer = "" default_val = self.entry_components_attribute_default.get("1.0", 'end-1c') if self.dropdown_components_attribute_layer.get() == "This Layer": layer = "comp_lvl" elif self.dropdown_components_attribute_layer.get() == "Agent Layer": layer = "agent_lvl" default_val = None elif self.dropdown_components_attribute_layer.get() == "Model Layer": layer = "model_lvl" default_val = None self.ec_app_ui.new_model.add_attribute(self.entry_components_name.get() , self.entry_components_attribute_name.get() , self.selected_primitive.get(), layer , default_val) else: self.ec_app_ui.new_model.add_attribute(self.entry_components_name.get() , self.entry_components_attribute_name.get() , self.selected_primitive.get(), "model_lvl") ### Now that the new attribute has been saved we allow the user to click add new attribute or complete ### Remove widgets ### self.label_components_add_attribute.grid_forget() self.label_components_attribute_name.grid_forget() self.entry_components_attribute_name.grid_forget() self.label_components_attribute_type.grid_forget() self.dropdown_components_attribute_type.grid_forget() self.label_components_attribute_default.grid_forget() self.entry_components_attribute_default.grid_forget() self.label_components_attribute_layer.grid_forget() self.dropdown_components_attribute_layer.grid_forget() ### Place button to add an attribute or complete component ### self.button_components_add_new_attribute_edit.grid(row = 4, column = 2,pady = 5) self.button_components_complete_component.grid(row = 5, column = 2,pady = 5) ### Clears entry boxes ### self.entry_components_attribute_name.delete(0, 'end')# Clears attribute name entry field self.entry_components_attribute_default.delete("1.0", 'end-1c') self.button_components_save_attribute_added.grid_forget()# Removes the save attribute button
[docs] def btn_components_add_new_attribute_edit(self): """Allows user to add new attribute to existing component """ self.entry_components_attribute_name.delete(0, 'end') self.entry_components_attribute_default.delete("1.0", 'end-1c') self.label_components_add_attribute.config(text="Add Attribute:") self.selected_primitive.set("int") ### Attribute name ### self.label_components_add_attribute.grid(row = 4, column = 0, padx = 150, pady = 5 , sticky="W") self.entry_components_attribute_name.delete(0,'end') self.label_components_attribute_name.grid(row = 5, column = 0, padx = 150, pady = 5 , sticky="W") self.entry_components_attribute_name.grid(row = 5, column = 2,pady = 5) ### Attribute type ### self.label_components_attribute_type.grid(row = 6, column = 0, padx = 150, pady = 5 , sticky="W") self.dropdown_components_attribute_type.grid(row = 6, column = 2,pady = 5) self.entry_components_attribute_default.delete("1.0", 'end-1c') if not self.checkbox_components_class_comp.get(): ### Attribute layer ### self.label_components_attribute_layer.grid(row = 7, column = 0, padx = 150, pady = 5 , sticky="W") self.dropdown_components_attribute_layer.set("") self.dropdown_components_attribute_layer.grid(row = 7, column = 2, pady = 5) ### Save button ### self.button_components_save_attribute_added.grid(row = 9, column = 2,pady = 5) ### Remove other buttons ### self.button_components_add_new_attribute_edit.grid_forget() self.button_components_complete_component.grid_forget()
[docs] def btn_components_remove(self): """Allows a user to delete selected component. """ self.ec_app_ui.new_model.remove_component(self.selected_components) self.components_tab_btn()
[docs] def display_selected_component(self, *args): """Saves the component the user clicked on. """ selected_items = self.components_tbl.selection() if selected_items: selected_item = self.components_tbl.selection()[0] self.selected_components = self.components_tbl.item(selected_item)['values'][0]