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. """ menu_df = pd.read_excel(file_path) menu = menu_df.to_dict(orient="records") return menu # Initialize menu and cart menu_data = load_menu() cart = [] def display_menu(): """ Function to render the menu as HTML. """ menu_html = "" for item in menu_data: menu_html += f"""
{item['Name']}

{item['Name']} - ${item['Price']}

{item['Description']}

""" return menu_html def add_to_cart(item_name, quantity): """ Add an item to the cart and return success message with cart count. """ quantity = int(quantity) # Check if the item already exists in the cart for item in cart: if item["name"] == item_name: item["quantity"] += quantity break else: # Add new item to cart for item in menu_data: if item["Name"] == item_name: cart.append({"name": item_name, "price": item["Price"], "quantity": quantity}) break return f"{item_name} added to cart! Total items: {len(cart)}" def view_cart(): """ Render the cart contents and calculate the total price. """ if not cart: return "Your cart is empty." cart_html = "

Cart Summary:

Total Price: ${total_price}

" return cart_html # Gradio Interface def menu_page(): return gr.update(value=display_menu(), visible=True), gr.update(visible=False) def cart_page(): return gr.update(value=view_cart(), visible=True), gr.update(visible=False) with gr.Blocks() as demo: gr.Markdown("# Dynamic Food Menu") # Menu and Cart Views menu_display = gr.HTML(value=display_menu(), visible=True) cart_display = gr.HTML(visible=False) notification = gr.Textbox(label="Notification", value="", interactive=False) # Navigation Buttons with gr.Row(): menu_button = gr.Button("Menu") cart_button = gr.Button("View Cart") # Add item interaction food_item_input = gr.Textbox(visible=False) # Hidden input to capture item name quantity_input = gr.Number(visible=False) # Hidden input to capture quantity add_button = gr.Button("Add to Cart", visible=False) # Simulated button for functionality # Notification when item is added add_button.click(add_to_cart, inputs=[food_item_input, quantity_input], outputs=notification) # Navigation between Menu and Cart pages menu_button.click(menu_page, outputs=[menu_display, cart_display]) cart_button.click(cart_page, outputs=[cart_display, menu_display]) # Render menu and cart demo += menu_display demo += cart_display demo += notification demo.launch()