From 336ba26bc84d8625bf708624e4167fdbe73e67cc Mon Sep 17 00:00:00 2001 From: zhu-mengmeng <15588200382@163.com> Date: Mon, 30 Jun 2025 18:40:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=9B=B8=E6=9C=BA?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=8C=BA=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/main_window_ui.py | 17 ++++++++------ widgets/camera_display_widget.py | 21 ++++++++++++++--- widgets/main_window.py | 40 +++++++++++++++++++++++++++++--- 3 files changed, 65 insertions(+), 13 deletions(-) diff --git a/ui/main_window_ui.py b/ui/main_window_ui.py index 62ffca8..f056de2 100644 --- a/ui/main_window_ui.py +++ b/ui/main_window_ui.py @@ -210,7 +210,7 @@ class MainWindowUI(QMainWindow): self.material_frame = QFrame() self.material_frame.setFrameShape(QFrame.StyledPanel) self.material_frame.setLineWidth(1) - self.material_frame.setFixedHeight(380) # 增加高度以匹配图片 + self.material_frame.setFixedHeight(380) # 恢复原始高度 self.material_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }") self.material_layout = QHBoxLayout(self.material_frame) self.material_layout.setContentsMargins(0, 0, 0, 0) @@ -234,13 +234,15 @@ class MainWindowUI(QMainWindow): self.left_layout.addWidget(self.material_frame) - # 托盘号行 - 使用QFrame包裹,添加边框 + # 托盘号区域 - 使用QFrame包裹,添加边框 self.tray_frame = QFrame() self.tray_frame.setFrameShape(QFrame.StyledPanel) self.tray_frame.setLineWidth(1) + self.tray_frame.setFixedHeight(40) # 进一步减小高度,刚好容纳控件 + self.tray_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }") self.tray_layout = QHBoxLayout(self.tray_frame) - self.tray_layout.setContentsMargins(0, 0, 0, 0) - self.tray_layout.setSpacing(0) + self.tray_layout.setContentsMargins(0, 0, 0, 0) # 移除所有边距 + self.tray_layout.setSpacing(0) # 移除所有间距 self.tray_label = QLabel("托盘号") self.tray_label.setFont(self.normal_font) @@ -250,7 +252,8 @@ class MainWindowUI(QMainWindow): self.tray_layout.addWidget(self.tray_label) self.tray_edit = QComboBox() - self.tray_edit.setStyleSheet("border: none; padding: 5px 10px;") + self.tray_edit.setFixedHeight(40) # 设置固定高度与父容器相同 + self.tray_edit.setStyleSheet("QComboBox { border: none; padding: 0px 10px; background-color: white; } QComboBox::drop-down { border: none; width: 20px; }") self.tray_edit.setFont(QFont("微软雅黑", 12)) self.tray_edit.setEditable(True) # 允许手动输入 self.tray_edit.setInsertPolicy(QComboBox.NoInsert) # 不自动插入用户输入到列表中 @@ -268,7 +271,7 @@ class MainWindowUI(QMainWindow): self.output_frame = QFrame() self.output_frame.setFrameShape(QFrame.StyledPanel) self.output_frame.setLineWidth(1) - self.output_frame.setFixedHeight(150) # 增加高度以匹配图片 + self.output_frame.setFixedHeight(100) # 缩小下料区高度 self.output_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }") self.output_layout = QHBoxLayout(self.output_frame) self.output_layout.setContentsMargins(0, 0, 0, 0) @@ -286,7 +289,7 @@ class MainWindowUI(QMainWindow): self.output_content = QWidget() self.output_content.setStyleSheet("background-color: white;") self.output_content_layout = QVBoxLayout(self.output_content) - self.output_content_layout.setContentsMargins(10, 10, 10, 10) + self.output_content_layout.setContentsMargins(5, 5, 5, 5) # 减小内部边距 self.output_layout.addWidget(self.output_content) self.left_layout.addWidget(self.output_frame) diff --git a/widgets/camera_display_widget.py b/widgets/camera_display_widget.py index afa20d2..c76c1e7 100644 --- a/widgets/camera_display_widget.py +++ b/widgets/camera_display_widget.py @@ -6,10 +6,12 @@ from ctypes import * # 确定使用哪个UI框架 try: from PySide6.QtWidgets import QWidget, QVBoxLayout, QFrame - from PySide6.QtCore import Qt, Signal + from PySide6.QtCore import Qt, Signal, QSize + from PySide6.QtGui import QPalette, QColor except ImportError: from PyQt5.QtWidgets import QWidget, QVBoxLayout, QFrame - from PyQt5.QtCore import Qt, pyqtSignal as Signal + from PyQt5.QtCore import Qt, pyqtSignal as Signal, QSize + from PyQt5.QtGui import QPalette, QColor # 添加相机模块路径 sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), "camera")) @@ -44,6 +46,12 @@ class CameraDisplayWidget(QWidget): # 设置大小变化事件处理 self.resizeEvent = self.on_resize_event + + # 设置固定尺寸策略,防止超出父容器 + self.setSizePolicy(QWidget.sizePolicy().Expanding, QWidget.sizePolicy().Expanding) + + # 设置最小尺寸 + self.setMinimumSize(QSize(320, 240)) def init_ui(self): """初始化UI - 只包含相机显示框架""" @@ -59,6 +67,8 @@ class CameraDisplayWidget(QWidget): self.frame.setFrameShape(QFrame.NoFrame) # 设置黑色背景 self.frame.setStyleSheet("background-color: #000000;") + # 设置框架的尺寸策略 + self.frame.setSizePolicy(QWidget.sizePolicy().Expanding, QWidget.sizePolicy().Expanding) # 添加到布局 layout.addWidget(self.frame) @@ -89,7 +99,7 @@ class CameraDisplayWidget(QWidget): success = self.camera_manager.start_grabbing(window_id) if success: - logging.info("相机画面显示开始") + logging.info(f"相机画面显示开始,显示区域大小: {self.frame.width()}x{self.frame.height()}") self.signal_camera_status.emit(True, "") else: logging.error("开始显示相机画面失败") @@ -125,6 +135,11 @@ class CameraDisplayWidget(QWidget): def on_resize_event(self, event): """处理大小变化事件,确保相机画面适配上料区""" super().resizeEvent(event) + + # 记录大小变化 + logging.debug(f"相机显示区域大小变化为: {self.width()}x{self.height()}") + + # 当尺寸变化超过一定阈值时,重新调整相机显示 if self.camera_manager.isGrabbing: # 停止当前显示 self.stop_display() diff --git a/widgets/main_window.py b/widgets/main_window.py index 64e6c7b..02b24e3 100644 --- a/widgets/main_window.py +++ b/widgets/main_window.py @@ -2872,6 +2872,7 @@ class MainWindow(MainWindowUI): """初始化相机显示区域""" try: logging.info(f"开始初始化相机显示区域,配置中camera_enabled={self.camera_enabled}") + logging.info(f"上料区域大小: {self.material_content.width()}x{self.material_content.height()}") # 检查相机管理器状态,以确定相机是否实际已打开 from widgets.camera_manager import CameraManager @@ -2912,11 +2913,14 @@ class MainWindow(MainWindowUI): self.material_placeholder = QLabel("相机初始化中..." if should_enable_camera else "相机功能已禁用") self.material_placeholder.setAlignment(Qt.AlignCenter) self.material_placeholder.setStyleSheet("color: #888888; background-color: #f0f0f0;") + self.material_placeholder.setSizePolicy(QWidget.sizePolicy().Expanding, QWidget.sizePolicy().Expanding) self.material_content_layout.addWidget(self.material_placeholder) self.material_placeholder.show() # 创建相机显示组件 self.camera_display = CameraDisplayWidget() + # 设置合适的尺寸策略,使相机显示能够正确适应上料区域 + self.camera_display.setSizePolicy(QWidget.sizePolicy().Expanding, QWidget.sizePolicy().Expanding) # 显式连接相机状态信号 try: @@ -2992,15 +2996,23 @@ class MainWindow(MainWindowUI): """开始显示相机画面(内部方法)""" try: if self.camera_display and self.camera_enabled: + logging.info(f"开始相机显示,上料区域大小: {self.material_content.width()}x{self.material_content.height()}") + # 先从布局中移除占位符 if self.material_placeholder: self.material_content_layout.removeWidget(self.material_placeholder) self.material_placeholder.hide() # 添加相机显示组件并确保其可见 + # 确保相机显示组件的布局策略正确 + self.camera_display.setSizePolicy(QWidget.sizePolicy().Expanding, QWidget.sizePolicy().Expanding) self.material_content_layout.addWidget(self.camera_display) self.camera_display.show() + # 强制布局更新 + self.material_content_layout.update() + self.material_content.updateGeometry() + # 开始显示 success = self.camera_display.start_display() @@ -3015,9 +3027,13 @@ class MainWindow(MainWindowUI): self.material_placeholder.show() logging.error("相机显示启动失败") else: - logging.info("相机显示已成功启动") + logging.info(f"相机显示已成功启动,显示区域大小: {self.camera_display.width()}x{self.camera_display.height()}") except Exception as e: logging.error(f"启动相机显示失败: {str(e)}") + if self.material_placeholder: + self.material_placeholder.setText(f"相机显示错误: {str(e)}") + self.material_content_layout.addWidget(self.material_placeholder) + self.material_placeholder.show() def update_camera_ui(self, is_camera_ready): """更新相机UI显示 @@ -3033,11 +3049,20 @@ class MainWindow(MainWindowUI): self.material_placeholder.hide() if self.camera_display: + # 确保相机显示组件的布局策略正确 + self.camera_display.setSizePolicy(QWidget.sizePolicy().Expanding, QWidget.sizePolicy().Expanding) + # 确保相机显示组件已添加到布局 if self.camera_display.parent() is None: self.material_content_layout.addWidget(self.camera_display) + self.camera_display.show() - logging.info("相机UI已更新:显示相机画面") + + # 强制布局更新 + self.material_content_layout.update() + self.material_content.updateGeometry() + + logging.info(f"相机UI已更新:显示相机画面,尺寸: {self.camera_display.width()}x{self.camera_display.height()}") else: # 隐藏相机画面,显示占位符 if self.camera_display: @@ -3045,16 +3070,25 @@ class MainWindow(MainWindowUI): self.camera_display.hide() if self.material_placeholder: + # 确保占位符布局策略正确 + self.material_placeholder.setSizePolicy(QWidget.sizePolicy().Expanding, QWidget.sizePolicy().Expanding) + # 确保占位符已添加到布局 if self.material_placeholder.parent() is None: self.material_content_layout.addWidget(self.material_placeholder) + self.material_placeholder.show() + # 强制布局更新 + self.material_content_layout.update() + self.material_content.updateGeometry() + if not self.camera_enabled: self.material_placeholder.setText("相机功能已禁用") elif not is_camera_ready: self.material_placeholder.setText("相机未就绪") - logging.info(f"相机UI已更新:显示占位符 (相机启用={self.camera_enabled}, 相机就绪={is_camera_ready})") + + logging.info(f"相机UI已更新:显示占位符 (相机启用={self.camera_enabled}, 相机就绪={is_camera_ready})") except Exception as e: logging.error(f"更新相机UI失败: {str(e)}")