Spaces:
Sleeping
Sleeping
File size: 3,723 Bytes
a691ebc 8edd0c3 32d8cff 8edd0c3 32d8cff 8edd0c3 32d8cff 8edd0c3 a691ebc 9b46be7 a691ebc 9b46be7 32d8cff 9b46be7 a691ebc 8edd0c3 a691ebc 8edd0c3 a691ebc 8edd0c3 a691ebc 9b46be7 a691ebc 9b46be7 8edd0c3 9b46be7 a691ebc 9b46be7 a691ebc 9b46be7 a691ebc 8edd0c3 9b46be7 a691ebc 8edd0c3 9b46be7 a691ebc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
import gradio as gr
import pandas as pd
# Load menu from Excel file
def load_menu(file_path="menu.xlsx"):
"""
Load menu data from an Excel file dynamically based on column headers.
"""
menu_df = pd.read_excel(file_path)
# Automatically detect column names
columns = menu_df.columns.str.strip() # Trim column names to avoid issues with spaces
name_column = [col for col in columns if "name" in col.lower()][0]
price_column = [col for col in columns if "price" in col.lower()][0]
description_column = [col for col in columns if "description" in col.lower()][0]
image_column = [col for col in columns if "image" in col.lower()][0]
menu = []
for _, row in menu_df.iterrows():
menu.append({
"name": row[name_column],
"price": row[price_column],
"description": row[description_column],
"image": row[image_column]
})
return menu
# Initialize the menu
menu_data = load_menu()
cart = []
def display_menu():
"""
Function to display the menu in a formatted style with an 'Add' button for each item.
"""
menu_html = ""
for item in menu_data:
menu_html += f"""
<div style="display: flex; margin-bottom: 15px; align-items: center; border: 1px solid #ddd; padding: 10px; border-radius: 5px;">
<img src="{item['image']}" alt="{item['name']}" style="width: 100px; height: 100px; margin-right: 15px; border-radius: 5px;">
<div style="flex-grow: 1;">
<h4 style="margin: 0;">{item['name']} - ${item['price']}</h4>
<p style="margin: 5px 0; font-size: 12px;">{item['description']}</p>
</div>
<button style="background-color: #28a745; color: white; border: none; padding: 8px 12px; border-radius: 5px; cursor: pointer;" onclick="add_to_cart('{item['name']}', 1)">Add</button>
</div>
"""
return menu_html
def add_to_cart(food_item, quantity):
"""
Add an item to the cart with its price and quantity.
"""
for item in menu_data:
if item["name"] == food_item:
cart.append({
"item": food_item,
"quantity": quantity,
"price": item["price"] * quantity
})
break
cart_summary = "<ul>"
total_price = 0
for item in cart:
cart_summary += f"<li>{item['item']} (x{item['quantity']}) - ${item['price']}</li>"
total_price += item["price"]
cart_summary += f"</ul><h4>Total Price: ${total_price}</h4>"
return f"{food_item} added to cart!\n\n{cart_summary}"
def view_cart():
"""
View the cart items and calculate the total price.
"""
if not cart:
return "Your cart is empty."
cart_summary = "<h3>Cart Summary:</h3><ul>"
total_price = 0
for item in cart:
cart_summary += f"<li>{item['item']} (x{item['quantity']}) - ${item['price']}</li>"
total_price += item["price"]
cart_summary += f"</ul><h4>Total Price: ${total_price}</h4>"
return cart_summary
with gr.Blocks() as demo:
gr.Markdown("# Dynamic Food Menu")
# Display menu
menu_display = gr.HTML(value=display_menu())
# Cart interactions
with gr.Row():
food_item_input = gr.Textbox(label="Food Item", placeholder="Enter item name")
quantity_input = gr.Number(label="Quantity", value=1, precision=0)
add_button = gr.Button("Add to Cart")
cart_button = gr.Button("View Cart")
cart_output = gr.HTML()
add_button.click(add_to_cart, inputs=[food_item_input, quantity_input], outputs=cart_output)
cart_button.click(view_cart, outputs=cart_output)
demo.launch()
|