feat: 正常打开相机
This commit is contained in:
parent
7023d7561a
commit
ead4cfcc95
@ -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)
|
||||||
|
|||||||
@ -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,))
|
||||||
|
|||||||
@ -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}")
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user