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

{item['Dish Name']}

${item['Price ($)']}

{item['Description']}

{item['Dish Name']}
""" 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()