0% found this document useful (0 votes)
5 views36 pages

kkkk

The document outlines a Python class named VehicleListInterface that creates a graphical user interface for managing a list of vehicles using the CustomTkinter library. It includes features such as filtering, adding, editing, and deleting vehicle entries, along with a search functionality. The layout consists of various frames, buttons, and labels to facilitate user interaction and display vehicle information.

Uploaded by

elimelech03
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views36 pages

kkkk

The document outlines a Python class named VehicleListInterface that creates a graphical user interface for managing a list of vehicles using the CustomTkinter library. It includes features such as filtering, adding, editing, and deleting vehicle entries, along with a search functionality. The layout consists of various frames, buttons, and labels to facilitate user interaction and display vehicle information.

Uploaded by

elimelech03
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 36

from customtkinter import CTkFrame, CTkLabel, CTkEntry, CTkButton, CTkCanvas,

CTkScrollableFrame, CTkImage,CTkCheckBox
from tkinter import StringVar, Toplevel
from PIL import Image

class VehicleListInteface(CTkFrame):

def __init__(self, *args, root_width : int = 1920, root_height : int = 1080,


**kwargs):

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.configure(fg_color = "#F1F5FA", corner_radius = 0)

i_form_width = int( (int(root_width * 0.89))* 0.885)


i_form_height = int((int (root_height * 0.88)) * 0.9)

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.table_headers = ["Vehicle Number", "Vehicle Type", "Vehicle Color",


"Owner Name", "Manufacturing Year"]

for col, value in enumerate(self.table_headers):


button = CTkButton(
self.frame_table_heading,
text = value,
height = 45,
fg_color="#313A46",
text_color="#FFFFFF",
anchor="w",
font = ("", 15, "bold"),
hover=False,
corner_radius=0,
cursor="hand2",
)
button.grid(row=0, column=col, sticky="nsew", padx=5)
self.dict_columns_buttons[value] = [button, False]
# self.list_columns_buttons.append({value : button, "sort_type" : 0})

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)

def update_table(self, list_vehicle_data: list):


# Clear existing rows
for child in self.frame_table_rows.winfo_children():
child.destroy()

self.current_selected_vehicle = None # Initialize or reset current


selected vehicle

# Display each row of vehicle data


for row_index, row_data in enumerate(list_vehicle_data):
row_bg_color = "transparent" if row_index % 2 == 0 else "#F7F9FB"
vehicle_number = row_data.get("vehicle_number", "") # Adjust key if
needed

# Limit to 5 columns of data


for col_index, cell_data in enumerate(list(row_data.values())[:5]):
rows = CTkLabel(
self.frame_table_rows,
text=cell_data,
height=40,
fg_color=row_bg_color,
anchor="w",
font=("", 14),
padx=12
)
rows.grid(row=row_index * 2, column=col_index, padx=0,
sticky="nsew")

# Add checkbox in the last column (6th column)


checkbox = CTkCheckBox(
self.frame_table_rows,
text="",
height=40,
fg_color="#3A36F5",
checkbox_height=20,
checkbox_width=20,
corner_radius=3,
border_width=2,
command=lambda vn=vehicle_number, rd=row_data, idx=row_index:
self.on_checkbox_click(vn,rd, idx) # Pass vehicle number and index
)
checkbox.grid(row=row_index * 2, column=5, padx=12, sticky="w")

# Add underline for separation


canvas_underline = CTkCanvas(
self.frame_table_rows,
height=1,
bg="#D7DDE5",
bd=0,
highlightthickness=0
)
canvas_underline.grid(row=row_index * 2 + 1, column=0, columnspan=6,
padx=0, pady=0, sticky="ew")

def on_checkbox_click(self, vehicle_number,row_data, row_index):

#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}")

# print("selected vechile number are


",self.selected_vehicle_set,self.vehicle_data)

# Deselect the previous checkbox safely


if self.current_selected_vehicle is not None and
self.current_selected_vehicle != row_index:
try:
# Assuming each checkbox is at column index 5 (6th column)
previous_checkbox =
self.frame_table_rows.grid_slaves(row=self.current_selected_vehicle * 2, column=5)
[0]
#previous_checkbox.deselect() # Deselect the previously selected
checkbox
except IndexError:
print("Previous checkbox not found or already deselected.")
print("length :",len(self.selected_vehicle_set))

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

else: # num_selected > 1


self.button_Add.configure(
state="disabled",
fg_color="#909090",
text_color="#A0A0A0",
hover_color="#313A46"
)
self.button_Edit.configure(
state="disabled",
fg_color="#909090",
text_color="#A0A0A0",
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()

self.bool_filter_popup = not self.bool_filter_popup


# ____________________________________________________________ [Add VEchile
frame]_____________________________________________________________________

def add_Vechile(self):
screen_width = self.winfo_screenwidth()
screen_height = self.winfo_screenheight()

# Set the desired width and height for the popup


popup_width = 600
popup_height = 700

# Calculate position to center the popup on the screen


x_position = (screen_width - popup_width) // 2 # Center horizontally
y_position = (screen_height - popup_height) // 2 # Center vertically

# Set the geometry for the popup


if hasattr(self, 'popup') and self.popup.winfo_exists():
self.popup.destroy()
# Create a popup window
self.popup = Toplevel(self)
self.popup.geometry(f"{popup_width}x{popup_height}+{x_position+200}+
{y_position}")
self.popup.title("Add New Vehicle")
#self.popup.overrideredirect(True)
self.popup.configure(bg="#FFFFFF")
self.popup.attributes("-topmost", True)

data={'vechike_name':'',
'heading':'Add Vechile',
'state':'normal'
}
self.Add_Veihcle_form(data)

def Add_Veihcle_form(self, data=[]):


self.i_form_width = 650 # Width of parent popup
self.i_form_height = 560 # Height of parent popup
self.bool_dropdown_opened = False
self.list_company = ["Toyota", "Honda", "Ford", "BMW", "Mercedes",
"Volkswagen", "Hyundai", "Nissan"]
self.list_vehicl_type = ["Personal", "Truck", "Motorcycle", "Bus", "Van",
"Auto", "Taxi"]
self.list_blacklist=["blacklist","whitlist"]

# Main form frame


self.frame_form = CTkFrame(
self.popup,
width=self.i_form_width,
height=self.i_form_height,
fg_color="#FFFFFF",
corner_radius=10
)
self.frame_form.columnconfigure((0,1), weight=1, uniform='a')
self.frame_form.rowconfigure((2,3), weight=1)
self.frame_form.grid_propagate(False)
self.frame_form.pack(side="top", expand=False, padx=0, pady=(0, 0))

# 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")

# Frame for left column with padding


self.frame_lcol = CTkFrame(
self.Vechile_details_frame,
fg_color="transparent",
)
self.frame_lcol.grid_propagate(False)
self.frame_lcol.columnconfigure(0, weight=1)
self.frame_lcol.grid(row=1, column=0, padx=(5, 5), pady=(5, 5),
sticky="nsew")

# Frame for right column with padding


self.frame_rcol = CTkFrame(
self.Vechile_details_frame,
fg_color="transparent",
)
self.frame_rcol.grid_propagate(False)
self.frame_rcol.columnconfigure(0, weight=1)
self.frame_rcol.grid(row=1, column=1, padx=(5, 5), pady=(5, 5),
sticky="nsew")

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

# Column Configuration to Center the Buttons


self.button_frame.columnconfigure(0, weight=1) # Left Spacer
self.button_frame.columnconfigure(1, weight=0) # Save Button
self.button_frame.columnconfigure(2, weight=0) # Cancel Button
self.button_frame.columnconfigure(3, weight=1) # Right Spacer

# # 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()

self.bool_dropdown_opened = not self.bool_dropdown_opened

def close_dropdown(self, event):


self.frame_Add_maindropdown_window.grid_forget()
self.bool_dropdown_opened = False

def Add_cancel(self):
if hasattr(self, 'popup') and self.popup.winfo_exists():
self.popup.destroy()

def select_option_Add(self, selected_option: str, entry_destination :


CTkEntry):
print("selected Add vechile ****")

# self.update_on_input_changed(entry_input_field = entry_destination,
str_border_color = "#DEDEDE")

entry_destination.configure(state="normal", text_color = "#414141")


entry_destination.delete(0, "end")
entry_destination.insert(0, selected_option)
entry_destination.configure(state="disabled")

self.frame_Add_maindropdown_window.grid_forget()
self.bool_dropdown_opened = False

#_________________________________________________________[Edit
Frame ]____________________________________________________________________________
____________________________

def edit_vechile(self, vehicle=[]):


# Handle edit camera logic here
screen_width = self.winfo_screenwidth()
screen_height = self.winfo_screenheight()

# Set the desired width and height for the popup


popup_width = 600
popup_height = 740

# Calculate position to center the popup on the screen


x_position = (screen_width - popup_width) // 2 # Center horizontally
y_position = (screen_height - popup_height) // 2 # Center vertically

# Set the geometry for the popup


data = {'heading': 'Edit Vechile',
'state': 'disabled'
}

if hasattr(self, 'popup') and self.popup.winfo_exists():


self.popup.destroy()

# Create a popup window


self.popup = Toplevel(self)
self.popup.geometry(f"{popup_width}x{popup_height}+{x_position+200}+
{y_position+80}")
self.popup.title("Edit Vechile")
self.popup.configure(bg="#FFFFFF")
self.popup.attributes("-topmost", True)
self.vehicle_form(data,vehicle)
def vehicle_form(self, data=[],vehicle=[]):

self.i_form_width = 650 # Width of parent popup


self.i_form_height = 560 # Height of parent popup
self.bool_dropdown_opened = False
self.list_company = ["Toyota", "Honda", "Ford", "BMW", "Mercedes",
"Volkswagen", "Hyundai", "Nissan"]
self.list_vehicl_type = ["Personal", "Truck", "Motorcycle", "Bus",
"Van", "Auto", "Taxi"]
self.list_blacklist=["blacklist","whitlist"]

# Main form frame


self.frame_Edit_form = CTkFrame(
self.popup,
width=self.i_form_width,
height=self.i_form_height,
fg_color="#FFFFFF",
corner_radius=10
)
self.frame_Edit_form.columnconfigure((0,1), weight=1, uniform='a')
self.frame_Edit_form.rowconfigure((2,3), weight=1)
self.frame_Edit_form.grid_propagate(False)
self.frame_Edit_form.pack(side="top", expand=False, padx=0, pady=(0,
0))

# 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")

# Frame for left column with padding


self.frame_lcol = CTkFrame(
self.Vechile_details_Edit_frame,
fg_color="transparent",
)
self.frame_lcol.grid_propagate(False)
self.frame_lcol.columnconfigure(0, weight=1)
self.frame_lcol.grid(row=1, column=0, padx=(5, 5), pady=(5, 5),
sticky="nsew")

# Frame for right column with padding


self.frame_rcol = CTkFrame(
self.Vechile_details_Edit_frame,
fg_color="transparent",
)
self.frame_rcol.grid_propagate(False)
self.frame_rcol.columnconfigure(0, weight=1)
self.frame_rcol.grid(row=1, column=1, padx=(5, 5), pady=(5, 5),
sticky="nsew")

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

blacklist_value = StringVar(value="Blacklist" if vehicle['blacklist']


== 1 else "Whitelist")

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

def popup_Edit_dropdown(self, list_data : list = [], entry_destination :


CTkEntry = None, i_row : int = None):
if self.bool_dropdown_opened is False:
for index, row_data in enumerate(list_data):
button_options = CTkButton(
self.frame_Edit_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_edit(selected_option, entry_destination)
)
button_options.grid(row = index, column = 0, sticky = "nsew",
padx=1)

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.bool_dropdown_opened = not self.bool_dropdown_opened

def close_dropdown(self, event):


self.frame_Edit_maindropdown_window.grid_forget()
self.bool_dropdown_opened = False

def select_option_edit(self, selected_option: str, entry_destination :


CTkEntry):
print("selected edit vechile ****")

# self.update_on_input_changed(entry_input_field = entry_destination,
str_border_color = "#DEDEDE")

entry_destination.configure(state="normal", text_color = "#414141")


entry_destination.delete(0, "end")
entry_destination.insert(0, selected_option)
entry_destination.configure(state="disabled")

self.frame_Edit_maindropdown_window.grid_forget()
self.bool_dropdown_opened = False

def popup_dropdown(self, list_data : list = [], entry_destination : CTkEntry =


None, i_row : int = None, i_rowspan : int = 2):

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()

def close_dropdown(self, event):


self.frame_maindropdown_window.grid_forget()
for child in self.frame_maindropdown_window.winfo_children():
child.destroy()

def select_option_filter(self, selected_option: str, entry_destination :


CTkEntry):
entry_destination.configure(state="normal", text_color = "#414141")
entry_destination.delete(0, "end")
entry_destination.insert(0, selected_option)
entry_destination.configure(state="disabled")

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 update_on_input_changed(self, entry_input_field : CTkEntry = None,


label_error : CTkLabel = None, str_error : str = "", str_border_color : str =
None):
# if(entry_input_field is not None):
# if(str_border_color is not None):
# entry_input_field.configure(border_color = str_border_color)
# if(label_error is None):
# if entry_input_field == self.entry_selected_company:
# label_error = self.label_company_error
# elif entry_input_field == self.entry_selected_type:
# label_error = self.label_type_error

# if(label_error is not None):


# label_error.configure(text=str_error)
# self.update()

# def update_on_input_changed(self, entry_input_field : CTkEntry = None,


label_error : CTkLabel = None, str_error : str = "", str_border_color : str =
None):
# if(entry_input_field is not None):
# if(str_border_color is not None):
# entry_input_field.configure(border_color = str_border_color)
# if(label_error is None):
# if entry_input_field == self.entry_selected_company:
# label_error = self.label_company_error
# elif entry_input_field == self.entry_selected_type:
# label_error = self.label_type_error

# if(label_error is not None):


# label_error.configure(text=str_error)
# self.update()

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()

for child in self.frame_table_rows.winfo_children():


child.destroy()

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

You might also like