feat: 修改轴重和线径超出范围时的警告提示逻辑,添加自动关闭功能
This commit is contained in:
parent
7dbf1c1efc
commit
fa36263c61
BIN
db/jtDB.db
BIN
db/jtDB.db
Binary file not shown.
@ -2,7 +2,7 @@ from pymodbus.client import ModbusTcpClient
|
||||
import time
|
||||
client = ModbusTcpClient('localhost', port=5020)
|
||||
client.connect()
|
||||
client.write_registers(address=11, values=[14322])
|
||||
client.write_registers(address=11, values=[11322])
|
||||
# client.write_registers(address=3, values=[0])
|
||||
# time.sleep(2)
|
||||
# client.write_registers(address=0, values=[0])
|
||||
@ -15,7 +15,7 @@ client.write_registers(address=11, values=[14322])
|
||||
# client.write_registers(address=2, values=[0])
|
||||
# client.write_registers(address=13, values=[1])
|
||||
# time.sleep(2)
|
||||
client.write_registers(address=13, values=[1])
|
||||
client.write_registers(address=13, values=[0])
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2204,6 +2204,66 @@ class MainWindow(MainWindowUI):
|
||||
logging.warning("工程号为空")
|
||||
return
|
||||
|
||||
# 检查轴重要求范围
|
||||
if "轴重要求" in self.info_values and self.info_values["轴重要求"] is not None:
|
||||
try:
|
||||
zzyq_value = self.info_values["轴重要求"].text().strip()
|
||||
if zzyq_value and "-" in zzyq_value:
|
||||
# 解析轴重要求范围,格式如 "12.5-13.5"
|
||||
parts = zzyq_value.split("-")
|
||||
if len(parts) == 2:
|
||||
min_weight = float(parts[0].strip())
|
||||
max_weight = float(parts[1].strip())
|
||||
|
||||
# 检查称重值是否在范围内
|
||||
if weight_kg < min_weight or weight_kg > max_weight:
|
||||
# 显示自动关闭的警告提示框
|
||||
self.warning_msg = QMessageBox(self)
|
||||
self.warning_msg.setIcon(QMessageBox.Warning)
|
||||
self.warning_msg.setWindowTitle('重量超出范围')
|
||||
self.warning_msg.setText(f"称重值 {weight_kg:.3f}kg 不在轴重要求范围内 ({min_weight:.1f} - {max_weight:.1f}kg)")
|
||||
self.warning_msg.setStandardButtons(QMessageBox.NoButton)
|
||||
self.warning_msg.setModal(False) # 确保非模态
|
||||
self.warning_msg.setWindowFlags(self.warning_msg.windowFlags() | Qt.WindowStaysOnTopHint) # 置顶显示
|
||||
|
||||
# 使用 show 而非 exec_ 保持非阻塞
|
||||
self.warning_msg.show()
|
||||
|
||||
# 强制关闭方法1:使用多种定时器策略
|
||||
def force_close_weight_warning():
|
||||
try:
|
||||
if hasattr(self, 'warning_msg') and self.warning_msg:
|
||||
if self.warning_msg.isVisible():
|
||||
self.warning_msg.close()
|
||||
self.warning_msg.deleteLater()
|
||||
logging.debug("重量警告弹框已强制关闭")
|
||||
else:
|
||||
logging.debug("重量警告弹框已不可见,跳过关闭")
|
||||
except Exception as e:
|
||||
logging.warning(f"强制关闭重量警告弹框时出错: {str(e)}")
|
||||
finally:
|
||||
# 清理引用
|
||||
if hasattr(self, 'warning_msg'):
|
||||
delattr(self, 'warning_msg')
|
||||
|
||||
# 使用多个定时器确保关闭
|
||||
QTimer.singleShot(5000, force_close_weight_warning) # 5秒后关闭
|
||||
QTimer.singleShot(6000, force_close_weight_warning) # 6秒后再次尝试
|
||||
|
||||
# 阻止继续执行,等待用户处理
|
||||
logging.warning(f"称重值 {weight_kg:.3f}kg 超出轴重要求范围,已阻止保存,等待用户处理")
|
||||
return
|
||||
else:
|
||||
logging.info(f"称重值 {weight_kg:.3f}kg 在轴重要求范围内 ({min_weight:.1f} - {max_weight:.1f}kg)")
|
||||
else:
|
||||
logging.debug(f"轴重要求格式不正确: '{zzyq_value}'")
|
||||
else:
|
||||
logging.debug(f"轴重要求格式不正确或为空,跳过范围检查: '{zzyq_value}'")
|
||||
except (ValueError, AttributeError) as e:
|
||||
logging.warning(f"解析轴重要求失败,跳过范围检查: {str(e)}")
|
||||
else:
|
||||
logging.debug("轴重要求字段不存在或为空,跳过范围检查")
|
||||
|
||||
# 暂时断开信号连接,避免触发cellChanged信号
|
||||
try:
|
||||
self.process_table.cellChanged.disconnect(self.handle_inspection_cell_changed)
|
||||
@ -3216,18 +3276,42 @@ class MainWindow(MainWindowUI):
|
||||
self.set_inspection_value('xj', xj_config, final_value)
|
||||
logging.info(f"已将稳定的线径值 {final_value:.3f} 保存到工程号 {gc_note} (行 {data_row})")
|
||||
else:
|
||||
reply = QMessageBox.question(
|
||||
self,
|
||||
'确认保存',
|
||||
f"线径 {final_value:.3f} 不在公差范围内 ({bccd} - {tccd}),\n是否继续保存?",
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.No
|
||||
)
|
||||
if reply == QMessageBox.Yes:
|
||||
self.set_inspection_value('xj', xj_config, final_value)
|
||||
logging.info(f"已将超出公差范围的线径值 {final_value:.3f} 保存到工程号 {gc_note} (行 {data_row})")
|
||||
# 显示自动关闭的警告提示框
|
||||
self.diameter_warning_msg = QMessageBox(self)
|
||||
self.diameter_warning_msg.setIcon(QMessageBox.Warning)
|
||||
self.diameter_warning_msg.setWindowTitle('线径超出范围')
|
||||
self.diameter_warning_msg.setText(f"线径 {final_value:.3f} 不在公差范围内 ({bccd} - {tccd})")
|
||||
self.diameter_warning_msg.setStandardButtons(QMessageBox.NoButton) # 不显示按钮
|
||||
self.diameter_warning_msg.setModal(False) # 确保非模态
|
||||
self.diameter_warning_msg.setWindowFlags(self.diameter_warning_msg.windowFlags() | Qt.WindowStaysOnTopHint) # 置顶显示
|
||||
|
||||
# 显示提示框(非模态)
|
||||
self.diameter_warning_msg.show()
|
||||
|
||||
# 强制关闭方法:使用多种定时器策略
|
||||
def force_close_diameter_warning():
|
||||
try:
|
||||
if hasattr(self, 'diameter_warning_msg') and self.diameter_warning_msg:
|
||||
if self.diameter_warning_msg.isVisible():
|
||||
self.diameter_warning_msg.close()
|
||||
self.diameter_warning_msg.deleteLater()
|
||||
logging.debug("线径警告弹框已强制关闭")
|
||||
else:
|
||||
logging.info(f"用户取消保存超出范围的线径值: {final_value:.3f}")
|
||||
logging.debug("线径警告弹框已不可见,跳过关闭")
|
||||
except Exception as e:
|
||||
logging.warning(f"强制关闭线径警告弹框时出错: {str(e)}")
|
||||
finally:
|
||||
# 清理引用
|
||||
if hasattr(self, 'diameter_warning_msg'):
|
||||
delattr(self, 'diameter_warning_msg')
|
||||
|
||||
# 使用多个定时器确保关闭
|
||||
QTimer.singleShot(2000, force_close_diameter_warning) # 1秒后关闭
|
||||
QTimer.singleShot(3000, force_close_diameter_warning) # 2秒后再次尝试
|
||||
|
||||
# 阻止继续执行,等待用户处理
|
||||
logging.warning(f"线径值 {final_value:.3f} 超出公差范围,已阻止保存,等待用户处理")
|
||||
return
|
||||
else:
|
||||
# 无公差范围,直接保存
|
||||
self.set_inspection_value('xj', xj_config, final_value)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user