feat: 优化相机显示区域

This commit is contained in:
zhu-mengmeng 2025-06-30 18:40:50 +08:00
parent 7da216ec58
commit 336ba26bc8
3 changed files with 65 additions and 13 deletions

View File

@ -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)

View File

@ -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"))
@ -45,6 +47,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()

View File

@ -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,15 +3070,24 @@ 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})")
except Exception as e:
logging.error(f"更新相机UI失败: {str(e)}")