feat: 正常打开相机
This commit is contained in:
parent
7023d7561a
commit
ead4cfcc95
@ -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)
|
||||
@ -238,10 +238,11 @@ class MainWindowUI(QMainWindow):
|
||||
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.setContentsMargins(0, 0, 0, 0) # 移除内边距,确保没有上下边界 # 移除所有边距
|
||||
self.tray_layout.setSpacing(0) # 移除所有间距
|
||||
|
||||
self.tray_label = QLabel("托盘号")
|
||||
@ -271,7 +272,7 @@ class MainWindowUI(QMainWindow):
|
||||
self.output_frame = QFrame()
|
||||
self.output_frame.setFrameShape(QFrame.StyledPanel)
|
||||
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_layout = QHBoxLayout(self.output_frame)
|
||||
self.output_layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
@ -269,6 +269,9 @@ class SerialManager:
|
||||
elif port_type == 'xj':
|
||||
# 线径数据需要特殊处理
|
||||
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':
|
||||
# 扫码器数据需要特殊处理
|
||||
thread = threading.Thread(target=self._read_scanner_thread, args=(port_name,))
|
||||
|
||||
@ -7,6 +7,7 @@ from PySide6.QtWidgets import QMessageBox
|
||||
from ui.serial_settings_ui import SerialSettingsUI
|
||||
from utils.config_loader import ConfigLoader
|
||||
from utils.serial_manager import SerialManager
|
||||
from PySide6.QtWidgets import QApplication
|
||||
|
||||
class SerialSettingsWidget(SerialSettingsUI):
|
||||
"""串口设置组件"""
|
||||
@ -422,6 +423,29 @@ class SerialSettingsWidget(SerialSettingsUI):
|
||||
if self.serial_manager.is_port_open(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(
|
||||
port, 'scanner', baud, data_bits, stop_bits, parity, 1.0
|
||||
@ -430,28 +454,27 @@ class SerialSettingsWidget(SerialSettingsUI):
|
||||
if success:
|
||||
QMessageBox.information(self, "测试成功", f"串口 {port} 打开成功\n请触发扫码器进行扫描测试")
|
||||
|
||||
# 尝试读取数据(短暂等待扫码器输入)
|
||||
# 等待用户操作扫码器(最多等待10秒)
|
||||
start_time = time.time()
|
||||
timeout = 5.0 # 5秒超时
|
||||
timeout = 10.0 # 10秒超时
|
||||
|
||||
while time.time() - start_time < timeout:
|
||||
response = self.serial_manager.read_data(port)
|
||||
if response:
|
||||
# 尝试将字节解码为字符串
|
||||
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
|
||||
|
||||
# 使用QApplication处理事件,保持UI响应
|
||||
QApplication.processEvents()
|
||||
time.sleep(0.1) # 短暂休眠,减少CPU占用
|
||||
|
||||
# 关闭串口
|
||||
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:
|
||||
QMessageBox.critical(self, "测试失败", f"无法打开串口 {port}")
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user