""" Create a Gradio interface for the complete code of the above case study. The interface should allow users to add items to the cart, remove items, display the cart, and calculate the total cost interactively. """ import gradio as gr from gradio import Blocks, Number, Button, Textbox Inventory = [ (1, "Apples", 250), (2, "Cherry", 650), (3, "Chickoo", 50), (4, "Grapes", 90), (5, "Mangoes", 150), ] Your_Cart = [] def add_item_to_cart(item_id, Inventory): """ Adds an item from the Inventory to the shopping cart. """ try: item = Inventory[item_id - 1] Your_Cart.append(item) return f"{'>'*10} '{item[1]}' has been added to the cart. {'<'*10} \n\n" except IndexError: return f"Invalid item ID: {item_id}" def remove_item(cart_index, cart_items): """ Removes an item from the shopping cart. """ try: removed_item = cart_items.pop(cart_index - 1) return f"{'>'*10} The item '{removed_item[1]}' has been removed from the cart, and your shopping cart has been updated. {'<'*10} \n\n" except IndexError: return "Invalid cart index or cart is empty." def display_cart(Your_Cart): """ Displays the items in the shopping cart. """ if Your_Cart: cart_str = "" # Initialize an empty string to store the cart display cart_str += "+" * 50 + "\n" cart_str += f"{'Your Cart'.center(40)}" + "\n" cart_str += "+" * 50 + "\n" cart_str += f"{'Index':<10} {'Name':<20} {'Quantity':<10} {'Price Per KG':<10}" + "\n" cart_str += "-" * 50 + "\n" unique_items = set(Your_Cart) # Get unique items in the cart total_cost = 0 for index, item in enumerate(unique_items): quantity = Your_Cart.count(item) price_per_kg = item[2] total_price = price_per_kg * quantity cart_str += f"{index+1:<10} {item[1]:<20} {quantity:<10} ${total_price:<10.2f}" + "\n" total_cost += total_price cart_str += "-" * 50 + "\n" cart_str += f"{'Total Cost':<40} ${total_cost:<10.2f}" # Display grand total return cart_str # Return the string representation of the cart else: return f"{'>'*10} Your cart is empty ! Buy something! {'<'*10} \n\n" def total_cost(cart_items): """ Calculates the total cost of all items in the shopping cart. """ total = 0 for item in cart_items: total += item[2] # Assuming quantity is 1 for now return f"~"*40 + "\n" + f"Total cost: {total}".center(40) + "\n" + "~"*40 + "\n\n" def gradio_interface(item_id, cart_index): """ Handles adding/removing items, displaying the cart, and calculating the total cost. Args: item_id (int): The product ID to add to the cart (if any). cart_index (int): The product ID to remove from the cart (if any). Returns: tuple: A tuple containing the updated cart display, add message, remove message, and total cost. """ # Add item add_msg = "" if item_id: add_msg = add_item_to_cart(item_id, Inventory) # Remove item remove_msg = "" if cart_index: remove_msg = remove_item(cart_index, Your_Cart) # Display the cart and calculate total cost cart_display = display_cart(Your_Cart) cost_msg = total_cost(Your_Cart) return cart_display, add_msg, remove_msg, cost_msg # Gradio interface creation def launch_gradio(): """ Launches the Gradio interface for the fruit shopping cart system. """ with gr.Blocks() as demo: gr.Markdown("### Fruit Shopping Cart System") with gr.Row(): item_id_input = gr.Number(label="Enter Product ID to Add to Cart", interactive=True) cart_index_input = gr.Number(label="Enter Index ID to Remove from Cart", interactive=True) with gr.Row(): add_button = gr.Button("Add to Cart") remove_button = gr.Button("Remove from Cart") cart_display_output = gr.Textbox(label="Your Cart", interactive=False) add_message_output = gr.Textbox(label="Add Item Message", interactive=False) remove_message_output = gr.Textbox(label="Remove Item Message", interactive=False) total_cost_output = gr.Textbox(label="Total Cost", interactive=False) # Add item button click behavior add_button.click( gradio_interface, inputs=[item_id_input, gr.Number(visible=False, value=0)], # Pass a hidden Number component for cart_index outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output] ) # Remove item button click behavior remove_button.click( gradio_interface, inputs=[gr.Number(visible=False, value=0), cart_index_input], # Pass a hidden Number component for item_id outputs=[cart_display_output, add_message_output, remove_message_output, total_cost_output] ) demo.launch() # Run the Gradio interface if __name__ == "__main__": launch_gradio()