You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy开发飞机告警APP:如何通过按钮id调取对应告警说明文本

数据存储方案选型

针对你的场景,不同存储方案的适用情况如下:

  • 独立字符串变量:不推荐,告警数量增加后难以维护,查找内容需要用到反射逻辑,效率低且容易出错
  • 每个告警创建单独类:属于过度设计,你仅需要存储说明字符串,不需要额外属性/方法的情况下完全没有必要
  • 字典存储:首推方案,结构清晰、查找效率高、维护成本低,键直接对应告警ID,值可以是纯说明字符串,后续如果需要扩展故障等级、参考手册页码等属性,还可以改成嵌套字典,适配性极强
  • 外部文件存储:如果你的告警内容需要非开发人员编辑,可以选择JSON、YAML这类结构化纯文本格式,不推荐用Word文档,需要额外安装第三方解析库,会增加应用打包体积和加载复杂度

代码修改方案

第一步:修改AOM.py用字典存储数据

# AOM.py
caution_data = {
    "pri_inv": "所有与主逆变器相关的故障描述与解决方案:xxxxxx(约200字内容)",
    "l_ac_bus": "所有与左交流汇流条相关的故障描述与解决方案:xxxxxx(约200字内容)",
    "emer_lts_disarmed": "所有与应急灯解除待命相关的故障描述与解决方案:xxxxxx(约200字内容)"
}

第二步:修改main.py的get_text方法

你之前传入的是按钮对象,直接取按钮的id作为字典的键查询即可:

def get_text(self, caution_btn):
    # 获取按钮ID作为查询key
    caution_id = caution_btn.id
    # 找不到对应ID时返回默认提示,避免报错
    content = AOM.caution_data.get(caution_id, "未查询到对应告警的说明信息")
    print(content)
    # 后续要在text_screen显示的话,直接把content赋值给对应文本组件即可

你之前写AOM.caution报错的原因是:caution是你传入的参数名,不是AOM模块里的属性名,不能直接这么引用,用字典就可以避免这个问题。

补充问题解答

  1. 不需要把文本存放在main.py中,把数据单独放在AOM.py这类独立模块是最佳实践,实现了业务逻辑和配置数据的分离,后续修改告警内容不需要碰主逻辑代码
  2. 不建议存在Word文档中,如果你需要非开发人员编辑告警内容,推荐用JSON格式存储,和字典的适配性极强,读取逻辑非常简单:
    示例aom_data.json文件:
{
    "pri_inv": "主逆变器故障说明...",
    "l_ac_bus": "左交流汇流条故障说明..."
}

AOM.py读取代码:

import json
with open("aom_data.json", "r", encoding="utf-8") as f:
    caution_data = json.load(f)

其他逻辑完全不需要改动,和直接用字典的用法一致。

内容的提问来源于stack exchange,提问作者PW1990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:24:02