in python please! write out the entire code Develop a multi-tabbed restaurant menu application using Tkinter. The app will allow users to browse different categories, select items, and view a summary of their order with a total price. Each selected item should be displayed along with its corresponding image. Requirements Tkinter GUI with Notebook Tabs. Menu Tab Categories: Appetizers (5 items or more) Entrees (5 items or more) Desserts (5 items or more) Drinks (5 items or more) Store the item name and price in a SQLite3 database for query lookup as necessary. Interaction: Users can select items using checkboxes, or buttons. Lookup the menu item in the SQLite database to get the item price. Display item name and price in each category on the menu. Each selected item should be visually represented with an image. Summary Page: Show selected items with their prices. Display images alongside each selected item. Extract the price for each item from the SQLIte3 database. Enumerate the selected items and calculate and display the total price. Advanced Python & Best Practices Implement the following advanced features: Object-Oriented Programming (OOP): Use well-defined tkinter based classes to organize application logic. Follow encapsulation and modular design principles. Separate business logic from UI components. Use Tkinter Efficiently: Leverage widgets for improved styling and responsiveness. Ensure dynamic updates through event handling ( in buttons/checkboxes). Efficient Data Handling: Store menu item information and images in a sqlite3 database. Use list comprehensions for concise and efficient item selection. Error Handling & Robust Code: Implement exception handling ( try-except ) where applicable. Validate user input and selections. External Libraries: Use Pillow for handling food item images. Store the product information in a database. Importing non-standard modules is restricted. Ensure your final implementation adheres to best practices for class design and incorporates advanced Python features to demonstrate a strong understanding of object-oriented programming principles. Define a Single Responsibility Each class should focus on a single purpose or responsibility (Single Responsibility Principle). Avoid overloading a class with multiple, unrelated functionalities. Use Meaningful Class and Method Names Choose clear, descriptive names that follow Python's CamelCase convention for classes and snake_case for methods and attributes. This improves readability and makes the purpose of the class obvious. Keep Methods Small and Focused A method should ideally do just one thing. This promotes modularity and makes the code easier to test and debug. Encapsulation Protect internal implementation details by making attributes private (prefix with or ).