Untitled
unknown
plain_text
a year ago
6.6 kB
16
Indexable
import tkinter as tk
from tkinter import messagebox
import json
from jsonFile import handel_file_json
from cartpagefinallll import CartPage
from itemPage import itemsPage
class Categories:
def __init__(self, root, category_name, go_back_callback, user):
self.page_stack = []
self.root = root
self.go_back_callback = go_back_callback
self.root.title("Category Selection")
self.root.geometry("500x500")
self.items = self.load_items()
self.sorted_items = {category: list(items) for category, items in self.items.items()}
self.cart = {}
self.user = user
self.open_category_page(category_name)
def go_back(self):
if len(self.page_stack) > 1:
self.page_stack.pop()
previous_page = self.page_stack[-1]
if previous_page == "Main Categories":
self.load_main_page()
else:
self.open_category_page(previous_page)
else:
self.go_back_callback()
def load_items(self):
with open('items.json', 'r') as file:
return json.load(file)
def save_items(self):
with open('items.json', 'w') as file:
json.dump(self.items, file, indent=4)
def open_category_page(self, category_name):
for widget in self.root.winfo_children():
widget.destroy()
if category_name not in self.page_stack:
self.page_stack.append(category_name)
tk.Label(self.root, text=f"Welcome to the {category_name} Page", font=("arial", 20)).pack(pady=20)
self.search_var = tk.StringVar()
tk.Entry(self.root, textvariable=self.search_var, width=30).pack(pady=10)
tk.Button(self.root, text="Search", command=lambda: self.search_items(category_name)).pack(pady=10)
tk.Button(self.root, text="Sort Ascending", command=lambda: self.sort_items(category_name, ascending=True)).pack(pady=10)
tk.Button(self.root, text="Sort Descending", command=lambda: self.sort_items(category_name, ascending=False)).pack(pady=10)
tk.Button(self.root, text="Proceed to Checkout", command=self.open_cart_pagee).pack(pady=10)
tk.Button(self.root, text="Back to Home", command=self.return_to_home).pack(pady=10)
self.display_items(category_name)
def search_items(self, category_name):
search_term = self.search_var.get().strip().lower()
items = self.sorted_items[category_name]
filtered_items = [item for item in items if search_term in item['name'].lower()]
self.display_filtered_items(filtered_items)
def binary_search(self, items, target_name):
low, high = 0, len(items) - 1
while low <= high:
mid = (low + high) // 2
mid_name = items[mid]['name'].lower()
if mid_name == target_name:
return [items[mid]]
elif mid_name < target_name:
low = mid + 1
else:
high = mid - 1
return []
def display_filtered_items(self, items):
for widget in self.root.winfo_children():
if isinstance(widget, tk.Frame):
widget.destroy()
self.display_items_content(items)
def quick_sort(self, items, low, high, ascending=True):
if low < high:
pi = self.partition(items, low, high, ascending)
self.quick_sort(items, low, pi - 1, ascending)
self.quick_sort(items, pi + 1, high, ascending)
def partition(self, items, low, high, ascending=True):
pivot = items[high]['price']
i = low - 1
for j in range(low, high):
if (items[j]['price'] <= pivot) if ascending else (items[j]['price'] >= pivot):
i += 1
items[i], items[j] = items[j], items[i]
items[i + 1], items[high] = items[high], items[i + 1]
return i + 1
def display_items(self, category_name):
items = self.sorted_items[category_name]
for widget in self.root.winfo_children():
if isinstance(widget, tk.Frame):
widget.destroy()
self.display_items_content(items)
def display_items_content(self, items):
for item in items:
item_frame = tk.Frame(self.root)
item_frame.pack(pady=5)
item_label = tk.Label(item_frame, text=f"Name: {item['name']}, Price: {item['price']}")
item_label.pack(side="left", padx=5)
qty_var = tk.IntVar(value=0)
qty_spinbox = tk.Spinbox(item_frame, from_=0, to=100, textvariable=qty_var)
qty_spinbox.pack(side="left", padx=5)
add_button = tk.Button(item_frame, text="Add to Cart", command=lambda i=item, q=qty_var: self.add_to_cart(i, q))
add_button.pack(side="left", padx=5)
def add_to_cart(self, item, qty_var):
quantity = qty_var.get()
if quantity > 0:
cart_data = self.cart[item['name']] = {
'user_id': self.user["id"],
'price': item['price'],
'quantity': quantity,
'product_name': item['name']
}
js = handel_file_json()
js.adde("Cart", cart_data)
messagebox.showinfo("Cart", f"Added {quantity} of {item['name']} to cart!")
else:
messagebox.showwarning("Quantity Error", "Please select a valid quantity.")
def open_cart_page(self):
for widget in self.root.winfo_children():
widget.destroy()
tk.Label(self.root, text="This is the Cart Page", font=("arial", 20)).pack(pady=20)
if self.cart:
for item_name, details in self.cart.items():
tk.Label(self.root, text=f"{item_name}: {details['quantity']} @ ${details['price']} each").pack()
total_price = sum(details['price'] * details['quantity'] for details in self.cart.values())
tk.Label(self.root, text=f"Total Price: ${total_price}").pack(pady=10)
else:
tk.Label(self.root, text="You have not selected any products.").pack(pady=10)
tk.Button(self.root, text="Back to Home", command=self.return_to_home).pack(pady=10)
def return_to_home(self):
for widget in self.root.winfo_children():
widget.destroy()
itemsPage(self.root, self.go_back_callback, self.user)
def open_cart_pagee(self):
CartPage(self.user)
Editor is loading...
Leave a Comment