| 29 | self.create_widgets() |
| 30 | |
| 31 | def create_widgets(self): |
| 32 | # Main frame |
| 33 | main_frame = ttk.Frame(self.root, padding="10") |
| 34 | main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S)) |
| 35 | |
| 36 | # Configure grid weights |
| 37 | self.root.columnconfigure(0, weight=1) |
| 38 | self.root.rowconfigure(0, weight=1) |
| 39 | main_frame.columnconfigure(1, weight=1) |
| 40 | |
| 41 | # Title |
| 42 | title_label = ttk.Label(main_frame, text="Background Remover", |
| 43 | font=("Arial", 16, "bold")) |
| 44 | title_label.grid(row=0, column=0, columnspan=3, pady=(0, 20)) |
| 45 | |
| 46 | # Input file selection |
| 47 | ttk.Label(main_frame, text="Input Image:").grid(row=1, column=0, sticky=tk.W, pady=5) |
| 48 | ttk.Entry(main_frame, textvariable=self.input_file, width=50).grid( |
| 49 | row=1, column=1, sticky=(tk.W, tk.E), padx=(5, 5), pady=5) |
| 50 | ttk.Button(main_frame, text="Browse", |
| 51 | command=self.browse_input_file).grid(row=1, column=2, pady=5) |
| 52 | |
| 53 | # Output file selection |
| 54 | ttk.Label(main_frame, text="Output File:").grid(row=2, column=0, sticky=tk.W, pady=5) |
| 55 | ttk.Entry(main_frame, textvariable=self.output_file, width=50).grid( |
| 56 | row=2, column=1, sticky=(tk.W, tk.E), padx=(5, 5), pady=5) |
| 57 | ttk.Button(main_frame, text="Browse", |
| 58 | command=self.browse_output_file).grid(row=2, column=2, pady=5) |
| 59 | |
| 60 | # Model selection |
| 61 | ttk.Label(main_frame, text="Model:").grid(row=3, column=0, sticky=tk.W, pady=5) |
| 62 | model_frame = ttk.Frame(main_frame) |
| 63 | model_frame.grid(row=3, column=1, sticky=(tk.W, tk.E), padx=(5, 0), pady=5) |
| 64 | |
| 65 | models = ["u2net", "u2netp", "u2net_human_seg"] |
| 66 | for i, model in enumerate(models): |
| 67 | ttk.Radiobutton(model_frame, text=model, variable=self.model_choice, |
| 68 | value=model).grid(row=0, column=i, padx=(0, 10)) |
| 69 | |
| 70 | # Alpha matting option |
| 71 | ttk.Checkbutton(main_frame, text="Use Alpha Matting (better quality)", |
| 72 | variable=self.alpha_matting).grid(row=4, column=0, columnspan=3, |
| 73 | sticky=tk.W, pady=10) |
| 74 | |
| 75 | # Process button |
| 76 | self.process_button = ttk.Button(main_frame, text="Remove Background", |
| 77 | command=self.process_image, style="Accent.TButton") |
| 78 | self.process_button.grid(row=5, column=0, columnspan=3, pady=20) |
| 79 | |
| 80 | # Progress bar |
| 81 | self.progress = ttk.Progressbar(main_frame, mode='indeterminate') |
| 82 | self.progress.grid(row=6, column=0, columnspan=3, sticky=(tk.W, tk.E), pady=5) |
| 83 | |
| 84 | # Status label |
| 85 | self.status_label = ttk.Label(main_frame, text="Ready to process images") |
| 86 | self.status_label.grid(row=7, column=0, columnspan=3, pady=5) |
| 87 | |
| 88 | # Preview frame |