kkkk
kkkk
CTkScrollableFrame, CTkImage,CTkCheckBox
from tkinter import StringVar, Toplevel
from PIL import Image
class VehicleListInteface(CTkFrame):
super().__init__(*args, **kwargs)
self.vehicle_data = []
self.selected_vehicle_set=set()
self.bool_filter_popup = False
self.bool_owner_dropdown_opened = False
self.bool_type_dropdown_opened = False
self.bool_color_dropdown_opened = False
self.selected_vehicle = None # Tracks the selected vehicle number (only
one at a time)
self.current_selected_vehicle = None # Tracks the row index of the
currently selected vehi
self.dict_columns_buttons = {}
self.frame_form = CTkFrame(
self,
width = i_form_width,
height = i_form_height,
fg_color = "#FFFFFF",
corner_radius=10
)
self.frame_form.columnconfigure(0, weight = 1, uniform="a")
self.frame_form.rowconfigure(3, weight=1)
self.frame_form.grid_propagate(False)
self.frame_form.pack(side="top", expand=False, padx=10, pady=30)
self.frame_header = CTkFrame(
self.frame_form,
height = int(i_form_height * 0.12),
fg_color = "transparent",
corner_radius=10
)
self.frame_header.columnconfigure(0, weight = 1)
self.frame_header.columnconfigure(1, weight = 2)
self.frame_header.columnconfigure(2, weight = 2)
self.frame_header.grid(column = 0, row = 0, sticky="we", padx = 5, pady =
(5,5))
self.label_heading = CTkLabel(
self.frame_header,
text="Vehicle List",
text_color = "#2C2C2C",
height = 38,
font = ("", 18, "bold"),
corner_radius = 10,
anchor="w",
fg_color="transparent"
)
self.label_heading.grid(row=0, column=0, padx=10, pady=(15,0), sticky="ew")
self.frame_header_rcol = CTkFrame(
self.frame_header,
height = int (i_form_height * 0.07),
fg_color = "transparent",
corner_radius=10
)
self.frame_header_rcol.rowconfigure(0, weight = 1)
self.frame_header_rcol.grid(row = 0, column = 1, columnspan = 2, sticky =
"nsew")
self.button_filter = CTkButton(
self.frame_header_rcol,
height = 38,
width = 100,
text = "Filter",
text_color = "white",
fg_color = "#5A616B",
border_width=2,
border_color="#313A46",
font=("", 14),
cursor="hand2",
anchor = "center",
hover=True,
command=self.reset_filter_form
)
self.button_filter.pack(side="right", padx=(4,15), pady=(15,0))
self.button_Delete_selected = CTkButton(
self.frame_header_rcol,
height = 38,
width = 100,
text = "Delete",
text_color = "white",
fg_color = "#909090",
border_width=2,
border_color="#313A46",
font=("", 14),
cursor="hand2",
anchor = "center",
hover=True,
state="disabled"
)
self.button_Delete_selected.pack(side="right", padx=4, pady=(15,0))
self.button_Edit = CTkButton(
self.frame_header_rcol,
height = 38,
width = 100,
text = "Edit",
text_color = "white",
fg_color = "#909090",
border_width=2,
border_color="#313A46",
font=("", 14),
cursor="hand2",
anchor = "center",
hover=True,
state="disabled"
)
self.button_Edit.pack(side="right", padx=4, pady=(15,0))
self.button_Add = CTkButton(
self.frame_header_rcol,
height = 38,
width = 100,
text = "Add",
text_color = "white",
fg_color = "#5A616B",
border_width=2,
border_color="#313A46",
font=("", 14),
cursor="hand2",
anchor = "center",
hover=True,
state="normal"
)
self.button_Add.pack(side="right", padx=4, pady=(15,0))
self.table_search_frame = CTkFrame(
self.frame_header_rcol,
height = 38,
fg_color = "transparent",
border_width = 2,
border_color = "#313A46",
corner_radius = 7,
)
self.table_search_frame.pack_propagate(False)
self.table_search_frame.pack(side="right", padx=(0,4), pady=(15,0))
img_search_icon = CTkImage(Image.open(".\\Resources\\images\\
search_icon.png"), size=(15, 15))
self.label_search_icon = CTkLabel(
self.table_search_frame,
image=img_search_icon,
text="",
width = 20,
height = 30,
fg_color="transparent"
)
self.label_search_icon.pack(side="left", padx = (10,0))
self.entry_search = CTkEntry(
self.table_search_frame,
height = 30,
placeholder_text="Enter Vehicle Number..",
placeholder_text_color="#A2B1C7",
text_color = "#414141",
border_width=0,
font = ("", 13),
fg_color = "transparent",
corner_radius = 10,
)
self.entry_search.pack(side="left", fill="x", expand=True,
padx=(0,10),pady=(0,1))
# self.button_Delete_selected = CTkButton(
# self.frame_header_rcol,
# height=38,
# width=100,
# text="Delete",
# text_color="#313A46",
# fg_color="transparent",
# border_width=2,
# border_color="#313A46",
# font=("", 14),
# cursor="hand2",
# anchor="center",
# hover=False,
# state="disabled" , # Initially disabled
# # command=self.Delete_Vechile_all
# )
# self.button_Delete_selected.pack(side="right", padx=(5, 5), pady=(15, 0))
# self.button_Add = CTkButton(
# self.frame_header_rcol,
# height = 38,
# width = 100,
# text = "ADD",
# text_color = "#313A46",
# fg_color = "transparent",
# border_width=2,
# border_color="#313A46",
# font=("", 14),
# cursor="hand2",
# anchor = "center",
# hover=False,
# state="normal",
# #command=self.add_Vechile,
# )
# self.button_Add.pack(side="right", padx=(5,5), pady=(15,0))
# self.button_Edit = CTkButton(
# self.frame_header_rcol,
# height=38,
# width=100,
# text="EDIT",
# text_color="#313A46",
# fg_color="transparent",
# border_width=2,
# border_color="#313A46",
# font=("", 14),
# cursor="hand2",
# anchor="center",
# hover=False,
# # command=self.edit_selected_Vehicle,
# state="disabled" # Initially disabled
# )
# self.button_Edit.pack(side="right", padx=(5, 5), pady=(15, 0))
# self.button_filter = CTkButton(
# self.frame_header_rcol,
# height = 38,
# width = 100,
# text = "Filter",
# text_color = "#313A46",
# fg_color = "transparent",
# border_width=2,
# border_color="#313A46",
# font=("", 14),
# cursor="hand2",
# anchor = "center",
# hover=False,
# command=self.reset_filter_form
# )
# self.button_filter.pack(side="right", padx=(5,5), pady=(15,0))
# self.table_search_frame = CTkFrame(
# self.frame_header_rcol,
# height = 38,
# fg_color = "transparent",
# border_width = 2,
# border_color = "#313A46",
# corner_radius = 7,
# )
# self.table_search_frame.pack_propagate(False)
# self.table_search_frame.pack(side="right", pady=(15,0))
# img_search_icon = CTkImage(Image.open(".\\Resources\\images\\
search_icon.png"), size=(15, 15))
# self.label_search_icon = CTkLabel(
# self.table_search_frame,
# image=img_search_icon,
# text="",
# width = 20,
# height = 30,
# fg_color="transparent"
# )
# self.label_search_icon.pack(side="left", padx = (10,0))
# self.entry_search = CTkEntry(
# self.table_search_frame,
# height = 30,
# placeholder_text="Enter Vehicle Number..",
# placeholder_text_color="#A2B1C7",
# text_color = "#414141",
# border_width=0,
# font = ("", 13),
# fg_color = "transparent",
# corner_radius = 10,
# )
# self.entry_search.pack(side="left", fill="x", expand=True,
padx=(0,10),pady=(0,1))
self.canvas_underline = CTkCanvas(
self.frame_form,
height=1,
bg="#D2D2D2",
bd=0,
highlightthickness=0
)
self.canvas_underline.grid(row=1, column=0, columnspan=2, pady=0,
sticky="ew")
self.frame_table_heading = CTkFrame(
self.frame_form,
height = 45,
fg_color = "#313A46",
corner_radius=5
)
self.frame_table_heading.columnconfigure((0,1,2,3,4), weight = 1,
uniform="a")
self.frame_table_heading.grid_propagate(False)
self.frame_table_heading.grid(row = 2, column = 0, padx=(15,19),
pady=(20,0), sticky = "nsew")
self.frame_table_rows = CTkScrollableFrame(
self.frame_form,
fg_color = "transparent",
corner_radius=0
)
self.frame_table_rows.columnconfigure((0,1,2,3), weight = 1, uniform = "a")
self.frame_table_rows.grid(row = 3, column = 0, padx=(15,2), pady=(0,20),
sticky = "nsew")
#_________________________________________________________[filter
frame]_______________________________________________________________
self.frame_filter = CTkFrame(
self.frame_form,
width = int(i_form_width * 0.317),
fg_color="#DEDEDE",
corner_radius=5
)
self.frame_filter.columnconfigure(0, weight = 1)
self.frame_filter.rowconfigure(0, weight=1)
self.frame_filter.grid_propagate(False)
self.frame_filter_form = CTkFrame(
self.frame_filter,
fg_color="#FFFFFF",
corner_radius = 4
)
self.frame_filter_form.columnconfigure((0,1), weight = 1)
self.frame_filter_form.rowconfigure((9), weight = 1)
self.frame_filter_form.grid(row = 0, column = 0, padx=(2,6), pady=(2,5),
sticky="nsew")
self.label_filter_heading = CTkLabel(
self.frame_filter_form,
text="Filter Vehicle",
font = ("", 18, "bold"),
anchor="w"
)
self.label_filter_heading.grid(row=0, column=0, columnspan=2, padx=15,
pady=(25,10), sticky="ew")
self.canvas_filter_underline = CTkCanvas(
self.frame_filter_form,
height=1,
bg="#D2D2D2",
bd=0,
highlightthickness=0
)
self.canvas_filter_underline.grid(row=1, column=0, columnspan=2, pady=(0,
10), sticky="ew")
self.label_filter_owner = CTkLabel(
self.frame_filter_form,
text="Owner Name",
text_color="#2C2C2C",
font = ("", 14),
anchor="w",
)
self.label_filter_owner.grid(row=2, column=0, columnspan = 2, padx=15,
pady=(5,0), sticky="ew")
self.frame_owner_filter_dropdown = CTkFrame(
self.frame_filter_form,
height=40,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_owner_filter_dropdown.columnconfigure(0, weight = 1)
self.frame_owner_filter_dropdown.rowconfigure(0, weight = 1)
self.frame_owner_filter_dropdown.grid(row=3, column=0, columnspan = 2,
padx=15, pady=(2,0), sticky="ew")
self.entry_selected_filter_owner = CTkEntry(
self.frame_owner_filter_dropdown,
height = 40,
fg_color = "#F6F6F6",
textvariable = StringVar(value="Select Owner Name"),
text_color="#828282",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14),
state="disabled"
)
self.entry_selected_filter_owner.grid(row = 0, column = 0, sticky = "nsew")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_select_filter_owner = CTkButton(
self.frame_owner_filter_dropdown,
image=img_down_arraow,
height = 35,
width = 35,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
)
self.button_select_filter_owner.grid(row = 0, column = 0, sticky = "e",
padx=3, pady=1.5)
self.label_filter_type = CTkLabel(
self.frame_filter_form,
text="Vehicle Type",
text_color="#2C2C2C",
font = ("", 14),
anchor="w",
)
self.label_filter_type.grid(row=4, column=0, columnspan = 2, padx=15,
pady=(15,0), sticky="ew")
self.frame_type_filter_dropdown = CTkFrame(
self.frame_filter_form,
height=40,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_type_filter_dropdown.columnconfigure(0, weight = 1)
self.frame_type_filter_dropdown.rowconfigure(0, weight = 1)
self.frame_type_filter_dropdown.grid(row=5, column=0, columnspan = 2,
padx=15, pady=(2,0), sticky="ew")
self.entry_selected_filter_type = CTkEntry(
self.frame_type_filter_dropdown,
height = 40,
fg_color = "#F6F6F6",
textvariable = StringVar(value="Select Vehicle Type"),
text_color="#828282",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14),
state="disabled"
)
self.entry_selected_filter_type.grid(row=1+1, column=1, columnspan=2,
padx=(150, 15), pady=(0, 10), sticky="w")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_select_filter_type = CTkButton(
self.frame_type_filter_dropdown,
image=img_down_arraow,
height = 35,
width = 35,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
)
self.button_select_filter_type.grid(row=1+1, column=1, columnspan=2,
padx=(150, 15), pady=(0, 10), sticky="w")
self.label_filter_color = CTkLabel(
self.frame_filter_form,
text="Vehicle Color",
text_color="#2C2C2C",
font = ("", 14),
anchor="w",
)
self.label_filter_color.grid(row=6, column=0, columnspan = 2, padx=15,
pady=(15,0), sticky="ew")
self.frame_color_filter_dropdown = CTkFrame(
self.frame_filter_form,
height=40,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_color_filter_dropdown.columnconfigure(0, weight = 1)
self.frame_color_filter_dropdown.rowconfigure(0, weight = 1)
self.frame_color_filter_dropdown.grid(row=7, column=0, columnspan = 2,
padx=15, pady=(2,0), sticky="ew")
self.entry_selected_filter_color = CTkEntry(
self.frame_color_filter_dropdown,
height = 40,
fg_color = "#F6F6F6",
textvariable = StringVar(value="Select Vehicle Color"),
text_color="#828282",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14),
state="disabled"
)
self.entry_selected_filter_color.grid(row = 0, column = 0, sticky = "nsew")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_select_filter_color = CTkButton(
self.frame_color_filter_dropdown,
image=img_down_arraow,
height = 35,
width = 35,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
)
self.button_select_filter_color.grid(row = 0, column = 0, sticky = "e",
padx=3, pady=1.5)
self.button_ok = CTkButton(
self.frame_filter_form,
height = 38,
width = 100,
text = "Ok",
text_color = "#FFFFFF",
fg_color = "#3A36F5",
border_color="#3A36F5",
font=("", 14),
cursor="hand2",
hover=False
)
self.button_ok.grid(row=8, column=0, padx=(15,3.75), pady=(25,0),
sticky="e")
self.button_cancel = CTkButton(
self.frame_filter_form,
height = 38,
width = 100,
text = "Cancel",
text_color = "#FFFFFF",
fg_color = "#6C757D",
border_color="#6C757D",
font=("", 14),
cursor="hand2",
hover=False
)
self.button_cancel.grid(row=8, column=1, padx=(3.75,15), pady=(25,0),
sticky="w")
self.frame_maindropdown_window = CTkFrame(
self.frame_filter_form,
fg_color="#DEDEDE",
height = 40,
corner_radius = 5
)
self.frame_maindropdown_window.columnconfigure(0, weight = 1)
self.frame_maindropdown_window.rowconfigure(0, weight=1)
self.frame_maindropdown_window.grid_propagate(False)
#_____________________________________________[Update
function]________________________________________________________________________
def edit_selected_Vehicle(self):
"""Handle editing of selected camera and ensure proper state reset"""
if len(self.selected_vehicle_set) == 1:
vechile_number = next(iter(self.selected_vehicle_set))
vehicle = next((cam for cam in self.vehicle_data if
cam['vehicle_number'] == vechile_number), None)
print("editable vehicle ",vehicle)
if vehicle:
self.edit_vechile(vehicle)
#self.selected_vehicle_set.add(vehicle_number)
if vehicle_number in self.selected_vehicle_set:
self.selected_vehicle_set.remove(vehicle_number)
print(f"Removed vehicle: {vehicle_number}")
else:
self.selected_vehicle_set.add(vehicle_number)
print(f"Added vehicle: {vehicle_number}")
self.update_button_states()
def update_button_states(self):
"""
Update button states based on the number of selected cameras
"""
num_selected = len(self.selected_vehicle_set)
if num_selected == 0:
self.button_Add.configure(
state="normal",
fg_color="#5A616B",
text_color="#FFFFFF",
hover_color="#313A46"
)
self.button_Edit.configure(
state="disabled",
fg_color="#909090",
text_color="#A0A0A0",
hover_color="313A46"
)
self.button_Delete_selected.configure(
state="disabled",
fg_color="#909090",
text_color="#A0A0A0",
hover_color="#313A46"
)
elif num_selected == 1:
self.button_Add.configure(
state="disabled",
fg_color="#909090",
text_color="#A0A0A0",
hover_color="#313A46"
)
self.button_Edit.configure(
state="normal",
fg_color="#5A616B",
text_color="#FFFFFF",
hover_color="#313A46"
)
self.button_Delete_selected.configure(
state="normal",
fg_color="#5A616B",
text_color="#FFFFFF",
hover_color="#313A46"
)
def toggle_filter_popup(self):
if (self.bool_filter_popup is False): # Popup is closed, need to opened it
self.frame_filter.grid_propagate(False)
self.frame_filter.grid(row=2, column = 0, rowspan = 2, sticky = "nse",
padx=19, pady=(2,80))
self.frame_filter.tkraise()
else: # Popup is opened, need to closed it
self.frame_filter.grid_forget()
def add_Vechile(self):
screen_width = self.winfo_screenwidth()
screen_height = self.winfo_screenheight()
data={'vechike_name':'',
'heading':'Add Vechile',
'state':'normal'
}
self.Add_Veihcle_form(data)
# Heading
self.label_heading = CTkLabel(
self.frame_form,
text=data['heading'] if 'heading' in data else "Add Vechile",
text_color="#2C2C2C",
font=("", 24, "bold"),
anchor="center",
corner_radius=10
)
self.label_heading.grid(row=0, column=0, columnspan=2, padx=25, pady=(10,
10), sticky="ew")
self.Vechile_details_frame = CTkFrame(
self.frame_form,
fg_color="transparent",
border_width=2,
border_color="#E5E7EB",
corner_radius=8,
height=407
)
self.Vechile_details_frame.grid_propagate(False)
self.Vechile_details_frame.columnconfigure((0, 1), weight=1, uniform="a")
self.Vechile_details_frame.rowconfigure(1, weight=1, uniform="a")
self.Vechile_details_frame.grid(row=1, column=0, columnspan=2, padx=10,
pady=10, sticky="new")
self.label_details_heading = CTkLabel(
self.Vechile_details_frame,
text=" ",
font=("", 16, "bold"),
anchor="w"
)
self.label_details_heading.grid(row=0, column=0, columnspan=2, padx=184,
pady=(10, 0), sticky="ew")
self.label_Vechile_name = CTkLabel(
self.frame_lcol,
text="Vechile Number ",
text_color="#2C2C2C",
font=("", 14),
anchor="w"
)
self.label_Vechile_name.grid(row=0, column=0, padx = (10, 14), pady =
(7,1), sticky="w")
self.entry_Vechile_Name = CTkEntry(
self.frame_lcol,
placeholder_text="Enter Vechile Number",
height=35,
fg_color="#F6F6F6",
placeholder_text_color="#828282",
text_color="#414141",
border_color="#DEDEDE",
border_width=2,
corner_radius=5,
font=("", 14)
)
self.entry_Vechile_Name.grid(row=1, column=0, padx=(10,7), sticky="ew")
self.label_company = CTkLabel(
self.frame_lcol,
text="Vehicle Comapny",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_company.grid(row=2, column=0,padx =(10, 14), pady = (7,1),
sticky="ew")
self.frame_company_dropdown = CTkFrame(
self.frame_lcol,
height=35,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_company_dropdown.columnconfigure(0, weight = 1)
self.frame_company_dropdown.rowconfigure(0, weight = 1)
self.frame_company_dropdown.grid(row=3, column=0, padx=(10,7) ,sticky="ew")
self.entry_selected_company = CTkEntry(
self.frame_company_dropdown,
height = 35,
fg_color = "#F6F6F6",
textvariable = StringVar(value="Select an option"),
text_color="#828282",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14),
state="disabled"
)
self.entry_selected_company.grid(row = 0, column = 0, sticky = "nsew")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_select_company = CTkButton(
self.frame_company_dropdown,
image=img_down_arraow,
height = 30,
width = 30,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
command=lambda: self.popup_Add_dropdown(self.list_company,
entry_destination = self.entry_selected_company, i_row = 3)
)
self.button_select_company.grid(row = 0, column = 0, sticky = "e", padx=3,
pady=1.5)
self.label_model = CTkLabel(
self.frame_rcol,
text="Vehicle Model",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_model.grid(row = 2, column = 0, padx = (7, 14), pady = (7,1),
sticky = "ew")
self.entry_model = CTkEntry(
self.frame_rcol,
height = 35,
fg_color = "#F6F6F6",
placeholder_text = "Enter Vehicle Model",
placeholder_text_color = "#828282",
text_color="#414141",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14)
)
self.entry_model.grid(row=3, column=0, padx=(7, 14), sticky="ew")
self.label_type = CTkLabel(
self.frame_lcol,
text="Vehicle Type",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_type.grid(row=4, column=0, padx= (10, 14), pady=(7,1),
sticky="ew")
self.frame_vehicle_type_dropdown_add = CTkFrame(
self.frame_lcol,
height=35,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_vehicle_type_dropdown_add.columnconfigure(0, weight = 1)
self.frame_vehicle_type_dropdown_add.rowconfigure(0, weight = 1)
self.frame_vehicle_type_dropdown_add.grid(row=5, column=0, padx=(10,7),
sticky="ew")
self.entry_selected_Add_type = CTkEntry(
self.frame_vehicle_type_dropdown_add,
height = 35,
fg_color = "#F6F6F6",
textvariable = StringVar(value="Select an option"),
text_color="#828282",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14),
state="disabled"
)
self.entry_selected_Add_type.grid(row = 0, column = 0, sticky = "nsew")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_select_type_add = CTkButton(
self.frame_vehicle_type_dropdown_add,
image=img_down_arraow,
height = 30,
width = 30,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
command=lambda: self.popup_Add_dropdown(self.list_vehicl_type,
entry_destination = self.entry_selected_Add_type,i_row = 6)
)
self.button_select_type_add.grid(row = 0, column = 0, sticky = "e", padx=3,
pady=1.5)
self.button_select_type_add.bind("<FocusOut>", self.close_dropdown)
self.label_color = CTkLabel(
self.frame_rcol,
text="Vehicle Color",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_color.grid(row = 4, column = 0, padx = (7, 14), pady = (7,1),
sticky = "ew")
self.entry_color = CTkEntry(
self.frame_rcol,
height = 35,
fg_color = "#F6F6F6",
placeholder_text = "Enter Vehicle Color",
placeholder_text_color = "#828282",
text_color="#414141",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14)
)
self.entry_color.grid(row=5, column=0, padx=(7, 10), sticky="ew")
self.label_blacklist = CTkLabel(
self.frame_lcol,
text="Vechile Status",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_blacklist.grid(row=6, column=0, padx=(10,7), pady=(7,1),
sticky="ew")
self.frame_blacklist_dropdown = CTkFrame(
self.frame_lcol,
height=10,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_blacklist_dropdown.columnconfigure(0, weight = 1)
self.frame_blacklist_dropdown.rowconfigure(0, weight = 1)
self.frame_blacklist_dropdown.grid(row=7, column=0,
padx=(10,7),sticky="ew")
self.entry_selected_blacklist= CTkEntry(
self.frame_blacklist_dropdown,
height = 35,
fg_color = "#F6F6F6",
textvariable = StringVar(value="Select an option"),
text_color="#828282",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14),
state="disabled"
)
self.entry_selected_blacklist.grid(row = 0, column = 0, sticky = "nsew")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_select_blacklist= CTkButton(
self.frame_blacklist_dropdown,
image=img_down_arraow,
height = 30,
width = 30,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
command=lambda: self.popup_Add_dropdown(self.list_blacklist,
entry_destination = self.entry_selected_blacklist, i_row = 8)
)
self.button_select_blacklist.grid(row = 0, column = 0, sticky = "e",
padx=3, pady=1.5)
self.label_year = CTkLabel(
self.frame_rcol,
text="Manufacturing Year",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_year.grid(row = 6, column = 0, padx = (7, 14), pady = (7,1),
sticky = "ew")
self.entry_year = CTkEntry(
self.frame_rcol,
height = 35,
fg_color = "#F6F6F6",
placeholder_text = "Enter Manufacturing Year",
placeholder_text_color = "#828282",
text_color="#414141",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14)
)
self.entry_year.grid(row=8, column=0, padx=(7, 10), sticky="ew")
self.label_owner = CTkLabel(
self.frame_rcol,
text="Vehicle Owner",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_owner.grid(row = 9, column = 0, padx = (7, 14), pady = (7,1),
sticky = "ew")
self.entry_Owner = CTkEntry(
self.frame_rcol,
height = 35,
fg_color = "#F6F6F6",
placeholder_text = "Enter Vehicle Owner",
placeholder_text_color = "#828282",
text_color="#414141",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14)
)
self.entry_Owner.grid(row=10, column=0, padx=(7, 10), sticky="ew")
CTkLabel(
self.frame_lcol,
height = 60,
text = ""
).grid(row=8, column=0, padx=(7, 10), sticky="ew")
self.button_frame = CTkFrame(
self.frame_form,
fg_color="transparent",
height=60
)
self.button_frame.grid(row=4, column=0, columnspan=2, padx=14, pady=(5,
10), sticky="new")
# # Save Button
self.button_save_Add_vechile = CTkButton(
self.button_frame,
height=35,
width=100,
text="Save",
text_color="#FFFFFF",
fg_color="#3A36F5",
border_color="#3A36F5",
font=("", 14),
cursor="hand2",
hover=False
)
self.button_save_Add_vechile.grid(row=0, column=1, padx=(0, 5), pady=(5,
10), sticky="nsew")
# Cancel Button
self.button_add_cancel = CTkButton(
self.button_frame,
height=35,
width=100,
text="Cancel",
text_color="#FFFFFF",
fg_color="#6C757D",
border_color="#6C757D",
font=("", 14),
cursor="hand2",
hover=False,
command=self.Add_cancel
)
self.button_add_cancel.grid(row=0, column=2, padx=(5, 0), pady=(5, 10),
sticky="nsew")
if hasattr(self, 'on_form_ready'):
self.on_form_ready()
# self.bind_widgets(self)
def popup_Add_dropdown(self, list_data : list = [], entry_destination :
CTkEntry = None, i_row : int = None):
self.frame_Add_maindropdown_window = CTkFrame(
self.frame_lcol,
fg_color="#DEDEDE",
height = 40,
corner_radius = 5
)
self.frame_Add_maindropdown_window.columnconfigure(0, weight = 1)
self.frame_Add_maindropdown_window.rowconfigure(0, weight=1)
self.frame_Add_maindropdown_window.grid_propagate(False)
self.frame_Add_popup_table = CTkScrollableFrame(
self.frame_Add_maindropdown_window,
fg_color="#FFFFFF",
height=40,
corner_radius = 5
)
self.frame_Add_popup_table.columnconfigure(0, weight = 1)
self.frame_Add_popup_table.grid(row=0, column=0, columnspan=2, padx=(1,
4), pady=(1, 3), sticky="nsew")
if self.bool_dropdown_opened is False:
for index, row_data in enumerate(list_data):
button_options = CTkButton(
self.frame_Add_popup_table,
text = f" {row_data}",
height = 20,
fg_color = "transparent",
text_color="#414141",
font = ("", 14),
corner_radius = 0,
hover_color = "#F6F6F6",
anchor = "w",
command=lambda selected_option=row_data:
self.select_option_Add(selected_option, entry_destination)
)
button_options.grid(row = index, column = 0, sticky = "nsew",
padx=1)
self.frame_Add_maindropdown_window.grid_propagate(False)
self.frame_Add_maindropdown_window.grid(row=i_row, column=0, rowspan=3,
sticky="nsew", padx=(14,7), pady=(5,0))
self.frame_Add_maindropdown_window.tkraise()
else:
self.frame_Add_maindropdown_window.grid_forget()
def Add_cancel(self):
if hasattr(self, 'popup') and self.popup.winfo_exists():
self.popup.destroy()
# self.update_on_input_changed(entry_input_field = entry_destination,
str_border_color = "#DEDEDE")
self.frame_Add_maindropdown_window.grid_forget()
self.bool_dropdown_opened = False
#_________________________________________________________[Edit
Frame ]____________________________________________________________________________
____________________________
# Heading
self.label_heading = CTkLabel(
self.frame_Edit_form,
text=data['heading'] if 'heading' in data else "Edit Vechile",
text_color="#2C2C2C",
font=("", 24, "bold"),
anchor="center",
corner_radius=10
)
self.label_heading.grid(row=0, column=0, columnspan=2, padx=25,
pady=(10, 10), sticky="ew")
self.Vechile_details_Edit_frame = CTkFrame(
self.frame_Edit_form,
fg_color="transparent",
border_width=2,
border_color="#E5E7EB",
corner_radius=8,
height=407
)
self.Vechile_details_Edit_frame.grid_propagate(False)
self.Vechile_details_Edit_frame.columnconfigure((0, 1), weight=1,
uniform="a")
self.Vechile_details_Edit_frame.rowconfigure(1, weight=1, uniform="a")
self.Vechile_details_Edit_frame.grid(row=1, column=0, columnspan=2,
padx=10, pady=10, sticky="new")
self.label_details_heading = CTkLabel(
self.Vechile_details_Edit_frame,
text=" ",
font=("", 16, "bold"),
anchor="w"
)
self.label_details_heading.grid(row=0, column=0, columnspan=2,
padx=184, pady=(10, 0), sticky="ew")
self.label_Vechile_Edit_name = CTkLabel(
self.frame_lcol,
text="Vechile Number",
text_color="#2C2C2C",
font=("", 14),
anchor="w"
)
self.label_Vechile_Edit_name.grid(row=0, column=0, padx = (10, 14),
pady = (7,1), sticky="w")
self.entry_Vechile_Edit_Name = CTkEntry(
self.frame_lcol,
# placeholder_text="Enter Vechile Number",
textvariable=StringVar(value=vehicle['vehicle_number']),
height=35,
fg_color="#F6F6F6",
placeholder_text_color="#828282",
text_color="#414141",
border_color="#DEDEDE",
border_width=2,
corner_radius=5,
font=("", 14)
)
self.entry_Vechile_Edit_Name.grid(row=1, column=0, padx=(10,7),
sticky="ew")
self.label_Edit_company = CTkLabel(
self.frame_lcol,
text="Vehicle Comapny",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_Edit_company.grid(row=2, column=0,padx =(10, 14), pady =
(7,1), sticky="ew")
self.frame_Edit_company_dropdown = CTkFrame(
self.frame_lcol,
height=35,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_Edit_company_dropdown.columnconfigure(0, weight = 1)
self.frame_Edit_company_dropdown.rowconfigure(0, weight = 1)
self.frame_Edit_company_dropdown.grid(row=3, column=0,
padx=(10,7) ,sticky="ew")
self.entry_Edit_selected_company = CTkEntry(
self.frame_Edit_company_dropdown,
height = 35,
fg_color = "#F6F6F6",
textvariable=StringVar(value=vehicle['vehicle_company']),
text_color="#828282",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14),
state="disabled"
)
self.entry_Edit_selected_company.grid(row = 0, column = 0, sticky =
"nsew")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_Edit_select_company = CTkButton(
self.frame_Edit_company_dropdown,
image=img_down_arraow,
height = 30,
width = 30,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
command=lambda: self.popup_Edit_dropdown(self.list_company,
entry_destination = self.entry_Edit_selected_company, i_row = 3)
)
self.button_Edit_select_company.grid(row = 0, column = 0, sticky = "e",
padx=3, pady=1)
self.label_Edit_model = CTkLabel(
self.frame_rcol,
text="Vehicle Model",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_Edit_model.grid(row = 2, column = 0, padx = (7, 14), pady =
(7,1), sticky = "ew")
self.entry_Edit_model = CTkEntry(
self.frame_rcol,
height = 35,
fg_color = "#F6F6F6",
textvariable=StringVar(value=vehicle['vehicle_model']),
placeholder_text_color = "#828282",
text_color="#414141",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14)
)
self.entry_Edit_model.grid(row=3, column=0,padx=(7, 14), sticky="ew")
self.label_Edit_type = CTkLabel(
self.frame_lcol,
text="Vehicle Type",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_Edit_type.grid(row=4, column=0, padx= (10, 7), pady=(7,1),
sticky="ew")
self.frame_Edit_vehicle_type_dropdown = CTkFrame(
self.frame_lcol,
height=35,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_Edit_vehicle_type_dropdown.columnconfigure(0, weight = 1)
self.frame_Edit_vehicle_type_dropdown.rowconfigure(0, weight = 1)
self.frame_Edit_vehicle_type_dropdown.grid(row=5, column=0,
padx=(10,7), sticky="ew")
self.entry_Edit_selected_type = CTkEntry(
self.frame_Edit_vehicle_type_dropdown,
height = 35,
fg_color = "#F6F6F6",
textvariable=StringVar(value=vehicle['vehicle_type']),
text_color="#828282",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14),
state="disabled"
)
self.entry_Edit_selected_type.grid(row = 0, column = 0, sticky =
"nsew")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_Edit_select_type = CTkButton(
self.frame_Edit_vehicle_type_dropdown,
image=img_down_arraow,
height = 30,
width = 30,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
command=lambda: self.popup_Edit_dropdown(self.list_vehicl_type,
entry_destination = self.entry_Edit_selected_type,i_row = 6)
)
self.button_Edit_select_type.grid(row = 0, column = 0, sticky = "e",
padx=3, pady=1.5)
self.button_Edit_select_type.bind("<FocusOut>", self.close_dropdown)
self.label_Edit_color = CTkLabel(
self.frame_rcol,
text="Vehicle Color",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_Edit_color.grid(row = 4, column = 0, padx = (7, 14), pady =
(7,1), sticky = "ew")
self.entry_Edit_color = CTkEntry(
self.frame_rcol,
height = 35,
fg_color = "#F6F6F6",
textvariable=StringVar(value=vehicle['vehicle_color']),
placeholder_text_color = "#828282",
text_color="#414141",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14)
)
self.entry_Edit_color.grid(row=5, column=0, padx=(7, 10), sticky="ew")
self.label_Edit_blacklist = CTkLabel(
self.frame_lcol,
text="Vechile Status",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_Edit_blacklist.grid(row=6, column=0, padx=(10,7),
pady=(7,1), sticky="ew")
self.frame_Edit_blacklist_dropdown = CTkFrame(
self.frame_lcol,
height=10,
fg_color="#F6F6F6",
corner_radius=5,
)
self.frame_Edit_blacklist_dropdown.columnconfigure(0, weight = 1)
self.frame_Edit_blacklist_dropdown.rowconfigure(0, weight = 1)
self.frame_Edit_blacklist_dropdown.grid(row=7, column=0, padx=(10,7),
sticky="ew")
self.entry_Edit_selected_blacklist = CTkEntry(
self.frame_Edit_blacklist_dropdown,
height=35,
fg_color="#F6F6F6",
textvariable=blacklist_value, # Use the blacklist_value directly
here
text_color="#828282",
border_color="#DEDEDE",
border_width=2,
corner_radius=5,
font=("", 14),
state="disabled"
)
self.entry_Edit_selected_blacklist.grid(row = 0, column = 0, sticky =
"nsew")
img_down_arraow = CTkImage(Image.open(".\\Resources\\images\\
down_arrow_icon.png"), size=(22, 22))
self.button_Edit_select_blacklist= CTkButton(
self.frame_Edit_blacklist_dropdown,
image=img_down_arraow,
height = 30,
width = 30,
text = "",
fg_color="transparent",
cursor="hand2",
border_width=0,
hover=False,
command=lambda: self.popup_Edit_dropdown(self.list_blacklist,
entry_destination = self.entry_Edit_selected_blacklist, i_row = 8)
)
self.button_Edit_select_blacklist.grid(row = 0, column = 0, sticky =
"e", padx=3, pady=1.5)
self.label_Edit_year = CTkLabel(
self.frame_rcol,
text="Manufacturing Year",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_Edit_year.grid(row = 6, column = 0, padx = (7, 14), pady =
(7,1), sticky = "ew")
self.entry_Edit_year = CTkEntry(
self.frame_rcol,
height = 35,
fg_color = "#F6F6F6",
textvariable=StringVar(value=vehicle['manufacturing_year']),
placeholder_text_color = "#828282",
text_color="#414141",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14)
)
self.entry_Edit_year.grid(row=8, column=0, padx=(7, 10), sticky="ew")
self.label_Edit_owner = CTkLabel(
self.frame_rcol,
text="Vehicle Owner",
text_color="#2C2C2C",
font = ("", 14),
anchor="w"
)
self.label_Edit_owner.grid(row = 9, column = 0, padx = (7, 14), pady =
(7,1), sticky = "ew")
self.entry_Edit_Owner = CTkEntry(
self.frame_rcol,
height = 35,
fg_color = "#F6F6F6",
textvariable=StringVar(value=vehicle['vehicle_owner']),
placeholder_text_color = "#828282",
text_color="#414141",
border_color = "#DEDEDE",
border_width = 2,
corner_radius = 5,
font = ("", 14)
)
self.entry_Edit_Owner.grid(row=10, column=0, padx=(7, 10), sticky="ew")
CTkLabel(
self.frame_lcol,
height = 60,
text = ""
).grid(row=8, column=0, padx=(7, 10), sticky="ew")
self.button_Edit_frame = CTkFrame(
self.frame_Edit_form,
fg_color="transparent",
height=60
)
self.button_Edit_frame.grid(row=4, column=0, columnspan=2, padx=14,
pady=(5, 10), sticky="new")
# Column Configuration to Center the Buttons
self.button_Edit_frame.columnconfigure(0, weight=1) # Left Spacer
self.button_Edit_frame.columnconfigure(1, weight=0) # Save Button
self.button_Edit_frame.columnconfigure(2, weight=0) # Cancel Button
self.button_Edit_frame.columnconfigure(3, weight=1) # Right Spacer
# # Save Button
self.button_Edit_save_vechile = CTkButton(
self.button_Edit_frame,
height=35,
width=100,
text="Edit",
text_color="#FFFFFF",
fg_color="#3A36F5",
border_color="#3A36F5",
font=("", 14),
cursor="hand2",
hover=False,
)
self.button_Edit_save_vechile.grid(row=0, column=1, padx=(0, 5),
pady=(5, 10), sticky="nsew")
# Cancel Button
self.button_Edit_cancel = CTkButton(
self.button_Edit_frame,
height=35,
width=100,
text="Reset",
text_color="#FFFFFF",
fg_color="#6C757D",
border_color="#6C757D",
font=("", 14),
cursor="hand2",
hover=False,
command=self.Add_cancel
)
self.button_Edit_cancel.grid(row=0, column=2, padx=(5, 0), pady=(5,
10), sticky="nsew")
if hasattr(self, 'on_form_ready'):
self.frame_Edit_maindropdown_window = CTkFrame(
self.frame_lcol,
fg_color="#DEDEDE",
height = 40,
corner_radius = 5
)
self.frame_Edit_maindropdown_window.columnconfigure(0, weight = 1)
self.frame_Edit_maindropdown_window.rowconfigure(0, weight=1)
self.frame_Edit_maindropdown_window.grid_propagate(False)
self.frame_Edit_popup_table = CTkScrollableFrame(
self.frame_Edit_maindropdown_window,
fg_color="#FFFFFF",
height=40,
corner_radius = 5
)
self.frame_Edit_popup_table.columnconfigure(0, weight = 1)
self.frame_Edit_popup_table.grid(row=0, column=0, columnspan=2,
padx=(1, 4), pady=(1, 3), sticky="nsew")
self.frame_Edit_maindropdown_window.grid_propagate(False)
self.frame_Edit_maindropdown_window.grid(row=i_row, column=0,
rowspan=3, sticky="nsew", padx=(14,7), pady=(5,0))
self.frame_Edit_maindropdown_window.tkraise()
else:
self.frame_Edit_maindropdown_window.grid_forget()
# self.update_on_input_changed(entry_input_field = entry_destination,
str_border_color = "#DEDEDE")
self.frame_Edit_maindropdown_window.grid_forget()
self.bool_dropdown_opened = False
parent = None
if(len(list_data) > 4):
frame_popup_table = CTkScrollableFrame(
self.frame_maindropdown_window,
fg_color="#FFFFFF",
height=40,
corner_radius = 5
)
frame_popup_table.columnconfigure(0, weight = 1)
frame_popup_table.grid(row = 0, column = 0, padx=(1,5), pady=(1,3),
sticky="nsew")
parent = frame_popup_table
else:
frame_popup_table = CTkFrame(
self.frame_maindropdown_window,
fg_color="#FFFFFF",
height=40,
corner_radius = 5
)
frame_popup_table.columnconfigure(0, weight = 1)
frame_popup_table.grid(row = 0, column = 0, padx=(1,5), pady=(1,3),
sticky="nsew")
parent = frame_popup_table
i_last_idx = len(list_data)-1
for index, row_data in enumerate(list_data):
button_options = CTkButton(
parent,
text = f" {row_data}",
height = 20,
fg_color = "transparent",
text_color="#414141",
font = ("", 14),
corner_radius = 0,
hover_color = "#F6F6F6",
anchor = "w",
command=lambda selected_option=row_data:
self.select_option_filter(selected_option, entry_destination)
)
button_options.grid(row = index, column = 0, sticky = "nsew")
if(index == i_last_idx) :
button_options.configure(font = ("", 14, "bold"))
self.frame_maindropdown_window.grid_propagate(False)
self.frame_maindropdown_window.grid(row=i_row, column=0, rowspan=i_rowspan,
columnspan = 2, sticky="nsew", padx=15, pady=(5,2))
self.frame_maindropdown_window.tkraise()
if(entry_destination == self.entry_selected_filter_owner):
self.bool_owner_dropdown_opened = False
elif(entry_destination == self.entry_selected_filter_type):
self.bool_type_dropdown_opened = False
elif(entry_destination == self.entry_selected_filter_color):
self.bool_color_dropdown_opened = False
self.close_dropdown(None)
def reset_Add_form(self):
if hasattr(self, 'popup') and self.popup.winfo_exists():
self.popup.destroy()
def reset_Delete_form(self):
if hasattr(self, 'popup') and self.popup.winfo_exists():
self.popup.destroy()
def reset_interface(self):
self.close_dropdown(None)
self.reset_filter_form()
self.entry_search.delete(0, "end")
self.entry_search.configure(placeholder_text = "Enter Vehicle Number..")
if self.bool_filter_popup is True:
self.toggle_filter_popup()
def reset_filter_form(self):
"""Reset all filters and their real text flags"""
self.owner_has_real_text = False
self.type_has_real_text = False
self.color_has_real_text = False
self.entry_selected_filter_owner.configure(text_color="#828282",
border_color="#DEDEDE")
self.entry_selected_filter_owner.delete(0, "end")
self.entry_selected_filter_owner.insert(0, "Select Owner Name")
self.entry_selected_filter_owner.configure(textvariable=StringVar(value="Select
Owner Name"), state="normal")
self.close_dropdown(None)
# self.entry_selected_owner.configure(textvariable=(value="Select Owner
Name"), state="normal")
self.entry_selected_filter_type.configure(text_color="#828282",
border_color="#DEDEDE")
self.entry_selected_filter_type.delete(0, "end")
self.entry_selected_filter_type.insert(0, "Select Vehicle Type")
self.entry_selected_filter_type.configure(textvariable=StringVar(value="Select
Vehicle Type"), state="normal")
self.entry_selected_filter_color.configure(text_color="#828282",
border_color="#DEDEDE")
self.entry_selected_filter_color.delete(0, "end")
self.entry_selected_filter_color.insert(0, "Select Vehicle Color")
self.entry_selected_filter_color.configure(textvariable=StringVar(value="Select
Vehicle Color"), state="normal")
def reset_frame_Edit_form(self):
self.entry_Vechile_Edit_Name.configure(state="normal", text_color =
"#828282", border_color = "#DEDEDE")
self.entry_Vechile_Edit_Name.delete(0, "end")
self.entry_Vechile_Edit_Name.insert(0, "Select Owner Name")
self.entry_Vechile_Edit_Name.configure(state="disabled")
self.entry_Edit_selected_company.configure(state="normal", text_color =
"#828282", border_color = "#DEDEDE")
self.entry_Edit_selected_company.delete(0, "end")
self.entry_Edit_selected_company.insert(0, "Select Vehicle Type")
self.entry_Edit_selected_company.configure(state="disabled")
self. entry_Edit_model.configure(state="normal", text_color = "#828282",
border_color = "#DEDEDE")
self. entry_Edit_model.delete(0, "end")
self. entry_Edit_model.insert(0, "Select Vehicle Color")
self.entry_Edit_model.configure(state="disabled")