Enums 在protobuffer中查找枚举类型

Enums 在protobuffer中查找枚举类型,enums,protocol-buffers,ironpython,Enums,Protocol Buffers,Ironpython,大家晚上好 用IronPython编写一个应用程序,该应用程序将充当一个系统的消息欺骗器,该系统尚未开发到足以测试我们的系统的程度。应用程序的一部分是一组表,用于显示消息和命令的值。对于命令,我们的命令中有一些字段具有枚举值。命令表将有一个下拉框,其中包含这些枚举选项 我的方法是为每个消息创建一个数据集。数据集有一个DataTable,其中包含消息字段和消息值。它还为消息中的每个枚举类型提供了一个表。下面的代码就是我用来判断字段是普通字段还是枚举字段的代码 msg = mpas.M120()

大家晚上好

用IronPython编写一个应用程序,该应用程序将充当一个系统的消息欺骗器,该系统尚未开发到足以测试我们的系统的程度。应用程序的一部分是一组表,用于显示消息和命令的值。对于命令,我们的命令中有一些字段具有枚举值。命令表将有一个下拉框,其中包含这些枚举选项

我的方法是为每个消息创建一个数据集。数据集有一个DataTable,其中包含消息字段和消息值。它还为消息中的每个枚举类型提供了一个表。下面的代码就是我用来判断字段是普通字段还是枚举字段的代码

 msg = mpas.M120()
 msg_fields = msg.DESCRIPTOR.fields
 for field in msg_fields:
        fieldEnumType = msg.DESCRIPTOR.fields_by_name[field.name].enum_type
        print("{} --> EnumType: {}".format(field.name, fieldEnumType.name if fieldEnumType != None else 'None'))
我还发现这对我也很有效:

 msg = mpas.M120()
 msg_fields = msg.DESCRIPTOR.fields
 for k,v in msg.DESCRIPTOR.fields_by_name.items():
        print ("{} --> {}".format(k, ((v.enum_type).name if v.enum_type != None else 'None')))
我将从中得到每个枚举字段的枚举名称。现在,我希望能够获得找到的每个枚举字段的所有值的列表。诀窍在于,在消息级别(即mpas.M120())定义特定消息使用的枚举,并且仅该消息使用的枚举。其他消息使用的枚举在顶级(即mpas.)定义

那么,我该如何找到这些枚举的值,以便填充下拉框呢?我已经为此工作了一天的大部分时间,但我无法理解


提前感谢…

您已经找到了
v.enum_type
,它是与字段的枚举类型相对应的
EnumDescriptor
。您可以从这里获得
name
,但此对象还包含一个值列表。请参阅此处的文档:


谢谢你的提示。我昨天做的所有工作都没有注意到这一点。我必须记住遇到这样的问题时要阅读手册。我明天上班时会试试,看看它是否能完成我需要的任务。