feat: 优化相机显示区域
This commit is contained in:
parent
7da216ec58
commit
336ba26bc8
@ -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)
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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)}")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user