"""
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]