Revert "增加队列模式,支持同时做多个任务"
This reverts commit 3689be68.
Showing
1 changed file
with
36 additions
and
152 deletions
| ... | @@ -1043,10 +1043,6 @@ class ImageGeneratorWindow(QMainWindow): | ... | @@ -1043,10 +1043,6 @@ class ImageGeneratorWindow(QMainWindow): |
| 1043 | # Initialize history manager | 1043 | # Initialize history manager |
| 1044 | self.history_manager = HistoryManager() | 1044 | self.history_manager = HistoryManager() |
| 1045 | 1045 | ||
| 1046 | # Initialize task queue manager | ||
| 1047 | from task_queue import TaskQueueManager | ||
| 1048 | self.task_manager = TaskQueueManager() | ||
| 1049 | |||
| 1050 | self.setup_ui() | 1046 | self.setup_ui() |
| 1051 | self.apply_styles() | 1047 | self.apply_styles() |
| 1052 | 1048 | ||
| ... | @@ -1258,14 +1254,10 @@ class ImageGeneratorWindow(QMainWindow): | ... | @@ -1258,14 +1254,10 @@ class ImageGeneratorWindow(QMainWindow): |
| 1258 | central_widget = QWidget() | 1254 | central_widget = QWidget() |
| 1259 | self.setCentralWidget(central_widget) | 1255 | self.setCentralWidget(central_widget) |
| 1260 | 1256 | ||
| 1261 | main_layout = QHBoxLayout() | 1257 | main_layout = QVBoxLayout() |
| 1262 | main_layout.setContentsMargins(10, 10, 10, 10) | 1258 | main_layout.setContentsMargins(10, 10, 10, 10) |
| 1263 | main_layout.setSpacing(10) | 1259 | main_layout.setSpacing(10) |
| 1264 | 1260 | ||
| 1265 | # Left side: Main content | ||
| 1266 | content_layout = QVBoxLayout() | ||
| 1267 | content_layout.setSpacing(10) | ||
| 1268 | |||
| 1269 | # Create tab widget | 1261 | # Create tab widget |
| 1270 | self.tab_widget = QTabWidget() | 1262 | self.tab_widget = QTabWidget() |
| 1271 | 1263 | ||
| ... | @@ -1287,20 +1279,7 @@ class ImageGeneratorWindow(QMainWindow): | ... | @@ -1287,20 +1279,7 @@ class ImageGeneratorWindow(QMainWindow): |
| 1287 | history_tab = self.setup_history_tab() | 1279 | history_tab = self.setup_history_tab() |
| 1288 | self.tab_widget.addTab(history_tab, "历史记录") | 1280 | self.tab_widget.addTab(history_tab, "历史记录") |
| 1289 | 1281 | ||
| 1290 | content_layout.addWidget(self.tab_widget) | 1282 | main_layout.addWidget(self.tab_widget) |
| 1291 | |||
| 1292 | # Create content widget with vertical layout | ||
| 1293 | content_widget = QWidget() | ||
| 1294 | content_widget.setLayout(content_layout) | ||
| 1295 | |||
| 1296 | # Add content to left side | ||
| 1297 | main_layout.addWidget(content_widget, 7) # 70% width | ||
| 1298 | |||
| 1299 | # Right side: Task queue sidebar | ||
| 1300 | from task_queue import TaskQueueWidget | ||
| 1301 | self.task_queue_widget = TaskQueueWidget(self.task_manager) | ||
| 1302 | main_layout.addWidget(self.task_queue_widget, 3) # 30% width | ||
| 1303 | |||
| 1304 | central_widget.setLayout(main_layout) | 1283 | central_widget.setLayout(main_layout) |
| 1305 | 1284 | ||
| 1306 | self.check_favorite_status() | 1285 | self.check_favorite_status() |
| ... | @@ -1944,66 +1923,26 @@ class ImageGeneratorWindow(QMainWindow): | ... | @@ -1944,66 +1923,26 @@ class ImageGeneratorWindow(QMainWindow): |
| 1944 | self.status_label.setStyleSheet("QLabel { color: #34C759; }") | 1923 | self.status_label.setStyleSheet("QLabel { color: #34C759; }") |
| 1945 | 1924 | ||
| 1946 | def generate_image_async(self): | 1925 | def generate_image_async(self): |
| 1947 | """Submit image generation task to queue""" | 1926 | """Start image generation in a separate thread""" |
| 1948 | from task_queue import TaskType | 1927 | # Create and start worker thread |
| 1949 | 1928 | self.worker = ImageGenerationWorker( | |
| 1950 | prompt = self.prompt_text.toPlainText().strip() | 1929 | self.api_key, |
| 1951 | if not prompt: | 1930 | self.prompt_text.toPlainText().strip(), |
| 1952 | QMessageBox.warning(self, "提示", "请输入图片描述!") | 1931 | self.uploaded_images, |
| 1953 | return | 1932 | self.aspect_ratio.currentText(), |
| 1954 | 1933 | self.image_size.currentText(), | |
| 1955 | try: | 1934 | "gemini-3-pro-image-preview" # 锁死模型 |
| 1956 | # Submit task to queue | ||
| 1957 | task_id = self.task_manager.submit_task( | ||
| 1958 | task_type=TaskType.IMAGE_GENERATION, | ||
| 1959 | prompt=prompt, | ||
| 1960 | api_key=self.api_key, | ||
| 1961 | reference_images=self.uploaded_images.copy(), | ||
| 1962 | aspect_ratio=self.aspect_ratio.currentText(), | ||
| 1963 | image_size=self.image_size.currentText(), | ||
| 1964 | model="gemini-3-pro-image-preview" | ||
| 1965 | ) | 1935 | ) |
| 1936 | self.worker.finished.connect(self.on_image_generated) | ||
| 1937 | self.worker.error.connect(self.on_generation_error) | ||
| 1938 | self.worker.progress.connect(self.update_status) | ||
| 1966 | 1939 | ||
| 1967 | # Connect to task completion signal | 1940 | self.generate_btn.setEnabled(False) |
| 1968 | self.task_manager.task_completed.connect( | 1941 | self.download_btn.setEnabled(False) |
| 1969 | lambda tid, img, p, refs, ar, size, model: | 1942 | self.status_label.setText("● 正在生成图片...") |
| 1970 | self._on_my_task_completed(task_id, tid, img, p, refs, ar, size, model) | 1943 | self.status_label.setStyleSheet("QLabel { color: #FF9500; }") |
| 1971 | ) | ||
| 1972 | |||
| 1973 | # Update UI | ||
| 1974 | self.status_label.setText(f"● 任务已提交 (ID: {task_id[:8]})") | ||
| 1975 | self.status_label.setStyleSheet("QLabel { color: #007AFF; }") | ||
| 1976 | |||
| 1977 | except RuntimeError as e: | ||
| 1978 | QMessageBox.warning(self, "队列已满", str(e)) | ||
| 1979 | |||
| 1980 | def _on_my_task_completed(self, my_task_id, task_id, image_bytes, prompt, | ||
| 1981 | reference_images, aspect_ratio, image_size, model): | ||
| 1982 | """Handle completion of my submitted task""" | ||
| 1983 | if my_task_id != task_id: | ||
| 1984 | return # Not my task | ||
| 1985 | 1944 | ||
| 1986 | # Update display | 1945 | self.worker.start() |
| 1987 | self.generated_image_bytes = image_bytes | ||
| 1988 | self.display_image() | ||
| 1989 | self.download_btn.setEnabled(True) | ||
| 1990 | self.status_label.setText("● 图片生成成功") | ||
| 1991 | self.status_label.setStyleSheet("QLabel { color: #34C759; }") | ||
| 1992 | |||
| 1993 | # Save to history | ||
| 1994 | try: | ||
| 1995 | self.history_manager.save_generation( | ||
| 1996 | image_bytes=image_bytes, | ||
| 1997 | prompt=prompt, | ||
| 1998 | reference_images=reference_images, | ||
| 1999 | aspect_ratio=aspect_ratio, | ||
| 2000 | image_size=image_size, | ||
| 2001 | model=model | ||
| 2002 | ) | ||
| 2003 | self.status_label.setText("● 图片生成成功,已保存到历史记录") | ||
| 2004 | self.refresh_history() | ||
| 2005 | except Exception as e: | ||
| 2006 | self.logger.warning(f"保存到历史记录失败: {e}") | ||
| 2007 | 1946 | ||
| 2008 | def on_image_generated(self, image_bytes, prompt, reference_images, aspect_ratio, image_size, model): | 1947 | def on_image_generated(self, image_bytes, prompt, reference_images, aspect_ratio, image_size, model): |
| 2009 | """Handle successful image generation""" | 1948 | """Handle successful image generation""" |
| ... | @@ -3300,9 +3239,7 @@ class StyleDesignerTab(QWidget): | ... | @@ -3300,9 +3239,7 @@ class StyleDesignerTab(QWidget): |
| 3300 | combo.setCurrentIndex(0) | 3239 | combo.setCurrentIndex(0) |
| 3301 | 3240 | ||
| 3302 | def generate_image(self): | 3241 | def generate_image(self): |
| 3303 | """Submit image generation task to queue""" | 3242 | """调用文生图 API""" |
| 3304 | from task_queue import TaskType | ||
| 3305 | |||
| 3306 | # 获取 prompt | 3243 | # 获取 prompt |
| 3307 | prompt = self.prompt_preview.toPlainText() | 3244 | prompt = self.prompt_preview.toPlainText() |
| 3308 | if not prompt.strip(): | 3245 | if not prompt.strip(): |
| ... | @@ -3312,61 +3249,36 @@ class StyleDesignerTab(QWidget): | ... | @@ -3312,61 +3249,36 @@ class StyleDesignerTab(QWidget): |
| 3312 | # 获取设置 | 3249 | # 获取设置 |
| 3313 | aspect_ratio = self.aspect_ratio.currentText() | 3250 | aspect_ratio = self.aspect_ratio.currentText() |
| 3314 | image_size = self.image_size.currentText() | 3251 | image_size = self.image_size.currentText() |
| 3315 | model = "gemini-3-pro-image-preview" | 3252 | model = "gemini-3-pro-image-preview" # 硬编码使用默认模型 |
| 3316 | 3253 | ||
| 3317 | # 获取父窗口的 API key | 3254 | # 获取父窗口的 API key |
| 3318 | if not hasattr(self.parent_window, 'api_key') or not self.parent_window.api_key: | 3255 | if not hasattr(self.parent_window, 'api_key') or not self.parent_window.api_key: |
| 3319 | QMessageBox.warning(self, "错误", "未找到 API 密钥,请在主窗口配置") | 3256 | QMessageBox.warning(self, "错误", "未找到 API 密钥,请在主窗口配置") |
| 3320 | return | 3257 | return |
| 3321 | 3258 | ||
| 3322 | try: | 3259 | # 非阻塞状态提示 |
| 3323 | # Submit task to queue | 3260 | self.generate_btn.setEnabled(False) |
| 3324 | task_id = self.parent_window.task_manager.submit_task( | 3261 | self.status_label.setText("● 生成中...") |
| 3325 | task_type=TaskType.STYLE_DESIGN, | 3262 | QApplication.processEvents() |
| 3326 | prompt=prompt, | ||
| 3327 | api_key=self.parent_window.api_key, | ||
| 3328 | reference_images=[], | ||
| 3329 | aspect_ratio=aspect_ratio, | ||
| 3330 | image_size=image_size, | ||
| 3331 | model=model | ||
| 3332 | ) | ||
| 3333 | |||
| 3334 | # Connect to task completion signal | ||
| 3335 | self.parent_window.task_manager.task_completed.connect( | ||
| 3336 | lambda tid, img, p, refs, ar, size, mdl: | ||
| 3337 | self._on_my_task_completed(task_id, tid, img, p, refs, ar, size, mdl) | ||
| 3338 | ) | ||
| 3339 | |||
| 3340 | # Update UI | ||
| 3341 | self.status_label.setText(f"● 任务已提交 (ID: {task_id[:8]})") | ||
| 3342 | |||
| 3343 | except RuntimeError as e: | ||
| 3344 | QMessageBox.warning(self, "队列已满", str(e)) | ||
| 3345 | 3263 | ||
| 3346 | def _on_my_task_completed(self, my_task_id, task_id, image_bytes, prompt, | ||
| 3347 | reference_images, aspect_ratio, image_size, model): | ||
| 3348 | """Handle completion of my submitted task""" | ||
| 3349 | if my_task_id != task_id: | ||
| 3350 | return # Not my task | ||
| 3351 | |||
| 3352 | # Update display | ||
| 3353 | self.generated_image_bytes = image_bytes | ||
| 3354 | self._display_generated_image_from_bytes() | ||
| 3355 | self.status_label.setText("● 生成成功") | ||
| 3356 | |||
| 3357 | # Save to history | ||
| 3358 | try: | 3264 | try: |
| 3359 | self.parent_window.history_manager.save_generation( | 3265 | # 创建生成线程 |
| 3360 | image_bytes=image_bytes, | 3266 | self.gen_thread = ImageGenerationWorker( |
| 3267 | api_key=self.parent_window.api_key, | ||
| 3361 | prompt=prompt, | 3268 | prompt=prompt, |
| 3362 | reference_images=reference_images, | 3269 | images=[], |
| 3363 | aspect_ratio=aspect_ratio, | 3270 | aspect_ratio=aspect_ratio, |
| 3364 | image_size=image_size, | 3271 | image_size=image_size, |
| 3365 | model=model | 3272 | model=model |
| 3366 | ) | 3273 | ) |
| 3367 | self.parent_window.refresh_history() | 3274 | self.gen_thread.finished.connect(self.on_generation_success) |
| 3275 | self.gen_thread.error.connect(self.on_generation_error) | ||
| 3276 | self.gen_thread.start() | ||
| 3277 | |||
| 3368 | except Exception as e: | 3278 | except Exception as e: |
| 3369 | self.logger.warning(f"保存到历史记录失败: {e}") | 3279 | self.generate_btn.setEnabled(True) |
| 3280 | self.status_label.setText("● 就绪") | ||
| 3281 | QMessageBox.critical(self, "错误", f"生成失败: {e}") | ||
| 3370 | 3282 | ||
| 3371 | def on_generation_success(self, image_bytes: bytes): | 3283 | def on_generation_success(self, image_bytes: bytes): |
| 3372 | """生成成功回调""" | 3284 | """生成成功回调""" |
| ... | @@ -3437,34 +3349,6 @@ class StyleDesignerTab(QWidget): | ... | @@ -3437,34 +3349,6 @@ class StyleDesignerTab(QWidget): |
| 3437 | self.status_label.setText("● 就绪") | 3349 | self.status_label.setText("● 就绪") |
| 3438 | QMessageBox.critical(self, "生成失败", error_msg) | 3350 | QMessageBox.critical(self, "生成失败", error_msg) |
| 3439 | 3351 | ||
| 3440 | def _display_generated_image_from_bytes(self): | ||
| 3441 | """从字节数据显示生成的图片""" | ||
| 3442 | if not self.generated_image_bytes: | ||
| 3443 | return | ||
| 3444 | |||
| 3445 | try: | ||
| 3446 | pixmap = QPixmap() | ||
| 3447 | pixmap.loadFromData(self.generated_image_bytes) | ||
| 3448 | |||
| 3449 | if not pixmap.isNull(): | ||
| 3450 | # 缩放以适应标签大小 | ||
| 3451 | scaled_pixmap = pixmap.scaled( | ||
| 3452 | self.result_label.size(), | ||
| 3453 | Qt.KeepAspectRatio, | ||
| 3454 | Qt.SmoothTransformation | ||
| 3455 | ) | ||
| 3456 | self.result_label.setPixmap(scaled_pixmap) | ||
| 3457 | self.result_label.setStyleSheet(""" | ||
| 3458 | QLabel { | ||
| 3459 | border: 1px solid #ddd; | ||
| 3460 | background-color: white; | ||
| 3461 | } | ||
| 3462 | """) | ||
| 3463 | # 启用下载按钮 | ||
| 3464 | self.download_btn.setEnabled(True) | ||
| 3465 | except Exception as e: | ||
| 3466 | self.logger.error(f"显示图片失败: {e}") | ||
| 3467 | |||
| 3468 | def download_image(self): | 3352 | def download_image(self): |
| 3469 | """下载图片""" | 3353 | """下载图片""" |
| 3470 | if not self.generated_image_bytes: | 3354 | if not self.generated_image_bytes: | ... | ... |
-
Please register or sign in to post a comment