Spaces:
Sleeping
Sleeping
File size: 3,207 Bytes
6a94706 b537c3b 7980609 b537c3b 2eb1a73 96fe3dc b537c3b 920d44a 057b451 96fe3dc 057b451 96fe3dc 057b451 6a94706 057b451 920d44a 057b451 920d44a 6a94706 920d44a 057b451 2eb1a73 057b451 ad4e58e 6a94706 057b451 6a94706 ad4e58e 057b451 ad4e58e 920d44a 7980609 920d44a 7980609 920d44a |
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 |
import gradio as gr
import pandas as pd
# Function to load the menu data from Excel
def load_menu():
menu_file = "menu.xlsx" # Ensure this file exists in the same directory
try:
return pd.read_excel(menu_file)
except Exception as e:
raise ValueError(f"Error loading menu file: {e}")
# Function to get unique categories
def get_categories():
menu_data = load_menu()
return list(menu_data["Category"].unique())
# Function to get dishes for a selected category
def get_dishes(category):
menu_data = load_menu()
dishes = menu_data[menu_data["Category"] == category]["Dish Name"].tolist()
return dishes
# Function to display the menu for a selected dish
def get_menu_item(dish_name):
menu_data = load_menu()
item = menu_data[menu_data["Dish Name"] == dish_name]
if item.empty:
return "No item found for the selected dish."
# Extract item details
item = item.iloc[0]
html_content = f"""
<div style="display: flex; align-items: center; border: 1px solid #ddd; border-radius: 8px; padding: 15px; margin-bottom: 10px; box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);">
<div style="flex: 1; margin-right: 15px;">
<h3 style="margin: 0; font-size: 18px;">{item['Dish Name']}</h3>
<p style="margin: 5px 0; font-size: 16px; color: #888;">${item['Price ($)']}</p>
<p style="margin: 5px 0; font-size: 14px; color: #555;">{item['Description']}</p>
</div>
<div style="flex-shrink: 0; text-align: center;">
<img src="{item['Image URL']}" alt="{item['Dish Name']}" style="width: 100px; height: 100px; border-radius: 8px; object-fit: cover; margin-bottom: 10px;">
<button style="background-color: #28a745; color: white; border: none; padding: 8px 15px; font-size: 14px; border-radius: 5px; cursor: pointer;">Add</button>
</div>
</div>
"""
return html_content
# Gradio app definition
def app():
with gr.Blocks(title="Dynamic Menu with Categories") as demo:
gr.Markdown("## Dynamic Menu with Categories")
# Dropdown for selecting a category
category_dropdown = gr.Dropdown(
choices=get_categories(),
value="Appetizer",
label="Select a Category",
)
# Dropdown for selecting a dish
dish_dropdown = gr.Dropdown(
choices=get_dishes("Appetizer"),
value="Samosa",
label="Select a Dish",
)
# Output area for the selected menu item
menu_output = gr.HTML()
# Define interactivity
def update_dishes(category):
return gr.update(choices=get_dishes(category), value=get_dishes(category)[0])
category_dropdown.change(
update_dishes,
inputs=[category_dropdown],
outputs=[dish_dropdown]
)
dish_dropdown.change(
get_menu_item,
inputs=[dish_dropdown],
outputs=[menu_output]
)
# Layout
gr.Row([category_dropdown, dish_dropdown])
menu_output.render()
return demo
# Run the app
if __name__ == "__main__":
demo = app()
demo.launch()
|