feat: 正常打开相机

This commit is contained in:
zhu-mengmeng 2025-06-30 20:43:52 +08:00
parent 7023d7561a
commit ead4cfcc95
3 changed files with 45 additions and 18 deletions

View File

@ -210,7 +210,7 @@ class MainWindowUI(QMainWindow):
self.material_frame = QFrame() self.material_frame = QFrame()
self.material_frame.setFrameShape(QFrame.StyledPanel) self.material_frame.setFrameShape(QFrame.StyledPanel)
self.material_frame.setLineWidth(1) 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_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }")
self.material_layout = QHBoxLayout(self.material_frame) self.material_layout = QHBoxLayout(self.material_frame)
self.material_layout.setContentsMargins(0, 0, 0, 0) self.material_layout.setContentsMargins(0, 0, 0, 0)
@ -238,10 +238,11 @@ class MainWindowUI(QMainWindow):
self.tray_frame = QFrame() self.tray_frame = QFrame()
self.tray_frame.setFrameShape(QFrame.StyledPanel) self.tray_frame.setFrameShape(QFrame.StyledPanel)
self.tray_frame.setLineWidth(1) self.tray_frame.setLineWidth(1)
# 移除固定高度,让托盘号的高度自适应其内容
self.tray_frame.setFixedHeight(40) # 进一步减小高度,刚好容纳控件 self.tray_frame.setFixedHeight(40) # 进一步减小高度,刚好容纳控件
self.tray_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }") self.tray_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }")
self.tray_layout = QHBoxLayout(self.tray_frame) self.tray_layout = QHBoxLayout(self.tray_frame)
self.tray_layout.setContentsMargins(0, 0, 0, 0) # 移除所有边距 self.tray_layout.setContentsMargins(0, 0, 0, 0) # 移除内边距,确保没有上下边界 # 移除所有边距
self.tray_layout.setSpacing(0) # 移除所有间距 self.tray_layout.setSpacing(0) # 移除所有间距
self.tray_label = QLabel("托盘号") self.tray_label = QLabel("托盘号")
@ -271,7 +272,7 @@ class MainWindowUI(QMainWindow):
self.output_frame = QFrame() self.output_frame = QFrame()
self.output_frame.setFrameShape(QFrame.StyledPanel) self.output_frame.setFrameShape(QFrame.StyledPanel)
self.output_frame.setLineWidth(1) self.output_frame.setLineWidth(1)
self.output_frame.setFixedHeight(100) # 下料区高度 self.output_frame.setFixedHeight(100) # 缩下料区域的高度从原来的150减少到100
self.output_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }") self.output_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }")
self.output_layout = QHBoxLayout(self.output_frame) self.output_layout = QHBoxLayout(self.output_frame)
self.output_layout.setContentsMargins(0, 0, 0, 0) self.output_layout.setContentsMargins(0, 0, 0, 0)

View File

@ -269,6 +269,9 @@ class SerialManager:
elif port_type == 'xj': elif port_type == 'xj':
# 线径数据需要特殊处理 # 线径数据需要特殊处理
thread = threading.Thread(target=self._read_diameter_thread, args=(port_name,)) thread = threading.Thread(target=self._read_diameter_thread, args=(port_name,))
thread.daemon = True
thread.start()
self.read_threads[port_name] = thread
elif port_type == 'scanner': elif port_type == 'scanner':
# 扫码器数据需要特殊处理 # 扫码器数据需要特殊处理
thread = threading.Thread(target=self._read_scanner_thread, args=(port_name,)) thread = threading.Thread(target=self._read_scanner_thread, args=(port_name,))

View File

@ -7,6 +7,7 @@ from PySide6.QtWidgets import QMessageBox
from ui.serial_settings_ui import SerialSettingsUI from ui.serial_settings_ui import SerialSettingsUI
from utils.config_loader import ConfigLoader from utils.config_loader import ConfigLoader
from utils.serial_manager import SerialManager from utils.serial_manager import SerialManager
from PySide6.QtWidgets import QApplication
class SerialSettingsWidget(SerialSettingsUI): class SerialSettingsWidget(SerialSettingsUI):
"""串口设置组件""" """串口设置组件"""
@ -422,6 +423,29 @@ class SerialSettingsWidget(SerialSettingsUI):
if self.serial_manager.is_port_open(port): if self.serial_manager.is_port_open(port):
self.serial_manager.close_port(port) self.serial_manager.close_port(port)
# 创建临时回调函数,用于测试期间接收扫码器数据
def scanner_callback(port_name, data):
try:
# 尝试将字节解码为字符串
try:
text = data.decode('utf-8').strip()
# 如果数据以"扫码数据: "开头,提取实际数据部分
if text.startswith("扫码数据: "):
text = text[6:].strip()
QMessageBox.information(self, "测试成功", f"收到扫码数据:\n{text}")
except:
# 如果解码失败,显示十六进制
hex_str = ' '.join(f'{b:02X}' for b in data)
QMessageBox.information(self, "测试成功", f"收到扫码数据 (十六进制):\n{hex_str}")
except Exception as e:
logging.error(f"处理扫码回调数据失败: {e}")
# 保存原始回调
original_callback = self.serial_manager.callbacks.get('scanner_data', None)
# 设置临时回调
self.serial_manager.callbacks['scanner_data'] = scanner_callback
# 尝试打开串口 # 尝试打开串口
success = self.serial_manager.open_port( success = self.serial_manager.open_port(
port, 'scanner', baud, data_bits, stop_bits, parity, 1.0 port, 'scanner', baud, data_bits, stop_bits, parity, 1.0
@ -430,28 +454,27 @@ class SerialSettingsWidget(SerialSettingsUI):
if success: if success:
QMessageBox.information(self, "测试成功", f"串口 {port} 打开成功\n请触发扫码器进行扫描测试") QMessageBox.information(self, "测试成功", f"串口 {port} 打开成功\n请触发扫码器进行扫描测试")
# 尝试读取数据(短暂等待扫码器输入 # 等待用户操作扫码器最多等待10秒
start_time = time.time() start_time = time.time()
timeout = 5.0 # 5秒超时 timeout = 10.0 # 10秒超时
while time.time() - start_time < timeout: while time.time() - start_time < timeout:
response = self.serial_manager.read_data(port) # 使用QApplication处理事件保持UI响应
if response: QApplication.processEvents()
# 尝试将字节解码为字符串
try:
text = response.decode('utf-8').strip()
QMessageBox.information(self, "测试成功", f"收到扫码数据:\n{text}")
break
except:
# 如果解码失败,显示十六进制
hex_str = ' '.join(f'{b:02X}' for b in response)
QMessageBox.information(self, "测试成功", f"收到扫码数据 (十六进制):\n{hex_str}")
break
time.sleep(0.1) # 短暂休眠减少CPU占用 time.sleep(0.1) # 短暂休眠减少CPU占用
# 关闭串口 # 关闭串口
self.serial_manager.close_port(port) self.serial_manager.close_port(port)
# 恢复原始回调
if original_callback:
self.serial_manager.callbacks['scanner_data'] = original_callback
else:
# 如果之前没有回调,则删除临时回调
if 'scanner_data' in self.serial_manager.callbacks:
del self.serial_manager.callbacks['scanner_data']
QMessageBox.information(self, "测试完成", f"串口 {port} 已关闭")
else: else:
QMessageBox.critical(self, "测试失败", f"无法打开串口 {port}") QMessageBox.critical(self, "测试失败", f"无法打开串口 {port}")