Content is user-generated and unverified.
import tkinter as tk from tkinter import ttk, messagebox import webbrowser from datetime import datetime import json import os class PhotoshopLearningApp: def __init__(self, root): self.root = root self.root.title("🎨 Photoshop Learning Adventure for Kids!") self.root.geometry("1000x700") self.root.configure(bg='#2E3192') # Student progress data self.progress_file = "student_progress.json" self.load_progress() # Course data structure self.curriculum = { "Phase 1: Digital Art Explorer": { "weeks": [ { "title": "Week 1-2: Welcome to Digital Art", "lessons": [ {"name": "What is Photoshop?", "video": "https://youtu.be/IyR_uYsRdPs", "completed": False}, {"name": "Mouse Skills & Brush Tools", "video": "https://youtu.be/x8gmDiRwM9k", "completed": False} ], "project": "Rainbow Paintings" }, { "title": "Week 3-4: Shapes & Colors", "lessons": [ {"name": "Shape Tools Magic", "video": "https://youtu.be/y7gJ5ELp6-A", "completed": False}, {"name": "Color Theory Fun", "video": "https://youtu.be/Qj1FK8n7WgY", "completed": False} ], "project": "Geometric Animals" }, { "title": "Week 5-6: Photo Magic", "lessons": [ {"name": "Importing & Cropping Photos", "video": "https://youtu.be/2qC4x5iI3HQ", "completed": False}, {"name": "Simple Filters & Effects", "video": "https://youtu.be/HKHEHLsOJ7o", "completed": False} ], "project": "Pet Photo Makeovers" } ], "color": "#FF6B6B" }, "Phase 2: Design Detective": { "weeks": [ { "title": "Week 7-8: Layers Like a Pro", "lessons": [ {"name": "Understanding Layers", "video": "https://youtu.be/Tx2GC_qtLZ4", "completed": False}, {"name": "Layer Organization", "video": "https://youtu.be/NN7eWAY5mOE", "completed": False} ], "project": "Digital Collages" }, { "title": "Week 9-10: Typography Adventures", "lessons": [ {"name": "Text Tools & Fonts", "video": "https://youtu.be/YlUhPrAny3M", "completed": False}, {"name": "Cool Text Effects", "video": "https://youtu.be/oQM4nNAOPTw", "completed": False} ], "project": "Movie Posters" }, { "title": "Week 11-12: Selection Superpowers", "lessons": [ {"name": "Magic Wand & Lasso", "video": "https://youtu.be/O8RiBum8M8Y", "completed": False}, {"name": "Advanced Selections", "video": "https://youtu.be/gDq7OvO1qkE", "completed": False} ], "project": "Background Swaps" } ], "color": "#4ECDC4" }, "Phase 3: Creative Professional": { "weeks": [ { "title": "Week 13-14: Advanced Photo Editing", "lessons": [ {"name": "Healing & Clone Tools", "video": "https://youtu.be/gAhYkY6VPag", "completed": False}, {"name": "Color Correction", "video": "https://youtu.be/W7Y3xw8WqP4", "completed": False} ], "project": "Photo Restoration" }, { "title": "Week 15-16: Digital Illustration", "lessons": [ {"name": "Pen Tool Mastery", "video": "https://youtu.be/tPCVTOaWJQo", "completed": False}, {"name": "Vector Shapes", "video": "https://youtu.be/O2TqvI5bYLw", "completed": False} ], "project": "Logo Design" }, { "title": "Week 17-18: Composition & Layout", "lessons": [ {"name": "Design Principles", "video": "https://youtu.be/ZK86XQ1iFVs", "completed": False}, {"name": "Grid Systems", "video": "https://youtu.be/a2DABzm_nCM", "completed": False} ], "project": "Magazine Layouts" } ], "color": "#45B7D1" }, "Phase 4: Design Professional": { "weeks": [ { "title": "Week 19-20: Advanced Masking", "lessons": [ {"name": "Complex Masks", "video": "https://youtu.be/cyE2bxj6UBE", "completed": False}, {"name": "Photo Compositing", "video": "https://youtu.be/RlOxWBACCz8", "completed": False} ], "project": "Fantasy Scenes" }, { "title": "Week 21-22: Brand Identity", "lessons": [ {"name": "Logo Design Principles", "video": "https://youtu.be/RBTiTcHlVTU", "completed": False}, {"name": "Brand Guidelines", "video": "https://youtu.be/KKfuJQX7-e0", "completed": False} ], "project": "Complete Brand Identity" }, { "title": "Week 23-24: Portfolio Creation", "lessons": [ {"name": "Professional Portfolios", "video": "https://youtu.be/6h3RJd4rPa0", "completed": False}, {"name": "File Export & Presentation", "video": "https://youtu.be/HDHgOOhCLAo", "completed": False} ], "project": "Final Portfolio Showcase" } ], "color": "#96CEB4" } } self.setup_ui() def load_progress(self): """Load student progress from file""" try: if os.path.exists(self.progress_file): with open(self.progress_file, 'r') as f: self.student_progress = json.load(f) else: self.student_progress = {"completed_lessons": [], "current_phase": 0} except: self.student_progress = {"completed_lessons": [], "current_phase": 0} def save_progress(self): """Save student progress to file""" try: with open(self.progress_file, 'w') as f: json.dump(self.student_progress, f) except: pass def setup_ui(self): """Setup the main user interface""" # Header header_frame = tk.Frame(self.root, bg='#2E3192', height=80) header_frame.pack(fill='x', pady=(0, 20)) header_frame.pack_propagate(False) title_label = tk.Label(header_frame, text="🎨 Photoshop Learning Adventure", font=('Comic Sans MS', 24, 'bold'), fg='white', bg='#2E3192') title_label.pack(pady=20) # Progress bar progress_frame = tk.Frame(self.root, bg='#2E3192') progress_frame.pack(fill='x', padx=20, pady=(0, 20)) tk.Label(progress_frame, text="Your Learning Progress:", font=('Arial', 12, 'bold'), fg='white', bg='#2E3192').pack(anchor='w') self.progress_var = tk.DoubleVar() self.progress_bar = ttk.Progressbar(progress_frame, variable=self.progress_var, maximum=100, length=400) self.progress_bar.pack(pady=5, anchor='w') self.progress_label = tk.Label(progress_frame, text="0% Complete", font=('Arial', 10), fg='white', bg='#2E3192') self.progress_label.pack(anchor='w') # Main content area main_frame = tk.Frame(self.root, bg='white') main_frame.pack(fill='both', expand=True, padx=20, pady=(0, 20)) # Create notebook for phases self.notebook = ttk.Notebook(main_frame) self.notebook.pack(fill='both', expand=True, padx=10, pady=10) self.setup_phases() self.update_progress() def setup_phases(self): """Setup phase tabs and content""" for phase_name, phase_data in self.curriculum.items(): # Create frame for this phase phase_frame = tk.Frame(self.notebook, bg='white') self.notebook.add(phase_frame, text=phase_name) # Create scrollable canvas canvas = tk.Canvas(phase_frame, bg='white') scrollbar = ttk.Scrollbar(phase_frame, orient="vertical", command=canvas.yview) scrollable_frame = tk.Frame(canvas, bg='white') scrollable_frame.bind( "<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")) ) canvas.create_window((0, 0), window=scrollable_frame, anchor="nw") canvas.configure(yscrollcommand=scrollbar.set) # Add weeks to this phase for week_idx, week_data in enumerate(phase_data["weeks"]): self.create_week_section(scrollable_frame, week_data, phase_data["color"], f"{phase_name}_{week_idx}") canvas.pack(side="left", fill="both", expand=True) scrollbar.pack(side="right", fill="y") def create_week_section(self, parent, week_data, color, week_id): """Create a week section with lessons and videos""" # Week container week_frame = tk.Frame(parent, bg=color, relief='raised', bd=2) week_frame.pack(fill='x', padx=10, pady=10) # Week title title_frame = tk.Frame(week_frame, bg=color) title_frame.pack(fill='x', padx=15, pady=10) tk.Label(title_frame, text=week_data["title"], font=('Arial', 16, 'bold'), fg='white', bg=color).pack(anchor='w') # Lessons lessons_frame = tk.Frame(week_frame, bg='white') lessons_frame.pack(fill='x', padx=15, pady=(0, 10)) for lesson_idx, lesson in enumerate(week_data["lessons"]): lesson_frame = tk.Frame(lessons_frame, bg='#f8f9fa', relief='groove', bd=1) lesson_frame.pack(fill='x', pady=5) # Lesson content content_frame = tk.Frame(lesson_frame, bg='#f8f9fa') content_frame.pack(fill='x', padx=10, pady=8) # Lesson name and status name_frame = tk.Frame(content_frame, bg='#f8f9fa') name_frame.pack(fill='x') lesson_key = f"{week_id}_{lesson_idx}" completed = lesson_key in self.student_progress["completed_lessons"] status_text = "✅" if completed else "⭕" tk.Label(name_frame, text=f"{status_text} {lesson['name']}", font=('Arial', 12, 'bold'), bg='#f8f9fa').pack(side='left') # Buttons frame buttons_frame = tk.Frame(content_frame, bg='#f8f9fa') buttons_frame.pack(fill='x', pady=(5, 0)) # Watch video button watch_btn = tk.Button(buttons_frame, text="🎥 Watch Video", font=('Arial', 10, 'bold'), bg='#FF4757', fg='white', command=lambda url=lesson["video"]: self.open_video(url)) watch_btn.pack(side='left', padx=(0, 10)) # Mark complete button if not completed: complete_btn = tk.Button(buttons_frame, text="✓ Mark Complete", font=('Arial', 10), bg='#2ED573', fg='white', command=lambda key=lesson_key: self.mark_complete(key)) complete_btn.pack(side='left') # Project section project_frame = tk.Frame(week_frame, bg='#FFF3CD', relief='groove', bd=1) project_frame.pack(fill='x', padx=15, pady=(0, 15)) tk.Label(project_frame, text=f"🎯 Week Project: {week_data['project']}", font=('Arial', 12, 'bold'), bg='#FFF3CD').pack(pady=8) def open_video(self, video_url): """Open video in web browser""" try: webbrowser.open(video_url) messagebox.showinfo("Video Opening", "Video is opening in your web browser!") except: messagebox.showerror("Error", "Could not open video. Please check your internet connection.") def mark_complete(self, lesson_key): """Mark a lesson as complete""" if lesson_key not in self.student_progress["completed_lessons"]: self.student_progress["completed_lessons"].append(lesson_key) self.save_progress() # Show celebration message messagebox.showinfo("Great Job! 🎉", "Lesson completed! You're becoming a Photoshop expert!") # Refresh the UI self.refresh_ui() def refresh_ui(self): """Refresh the entire UI""" # Clear notebook for tab in self.notebook.tabs(): self.notebook.forget(tab) # Recreate phases self.setup_phases() self.update_progress() def update_progress(self): """Update the progress bar""" total_lessons = 0 completed_lessons = len(self.student_progress["completed_lessons"]) for phase_data in self.curriculum.values(): for week_data in phase_data["weeks"]: total_lessons += len(week_data["lessons"]) if total_lessons > 0: progress_percent = (completed_lessons / total_lessons) * 100 self.progress_var.set(progress_percent) self.progress_label.config(text=f"{progress_percent:.1f}% Complete ({completed_lessons}/{total_lessons} lessons)") # Check for milestones if progress_percent == 100: messagebox.showinfo("🏆 CONGRATULATIONS! 🏆", "You've completed the entire Photoshop course!\nYou're now ready for advanced design work!") elif completed_lessons > 0 and completed_lessons % 6 == 0: # Every 6 lessons messagebox.showinfo("🌟 Milestone Reached! 🌟", f"Amazing! You've completed {completed_lessons} lessons!\nKeep up the great work!") def main(): """Run the application""" root = tk.Tk() app = PhotoshopLearningApp(root) # Add window icon and styling try: root.iconbitmap('photoshop_icon.ico') # Add if you have an icon file except: pass # Center window on screen root.update_idletasks() width = root.winfo_width() height = root.winfo_height() x = (root.winfo_screenwidth() // 2) - (width // 2) y = (root.winfo_screenheight() // 2) - (height // 2) root.geometry(f'{width}x{height}+{x}+{y}') # Make window resizable root.minsize(800, 600) # Start the app root.mainloop() if __name__ == "__main__": main()
Content is user-generated and unverified.
    Photoshop Learning App for Kids | Claude