Hallo Niklas,
Das ist deswegen so, weil ValueType von Attribute übernimmt die Art des Kontrolelementes (Combo box, Eingabefeld...) aus der Attributdefinition. In der Definition vom Attribut @1905@ ist es als TextBox festgelegt, also ein normales Eingabefeld. Das ist bewusst so gemacht, damit die Datenkonsistenz beim Zurückschreiben vom PythonPart ins Attribut und in die andere Richtung erhalten bleibt.
Um dein Ziel zu erreichen, definiere ein ComboBox attribut in der .pyp Datei und mach zwei Sachen:
1. Füge den Tag <AttributeId> zusätzlich in das Attribut. Somit wird das Attributwert ins Parameterwert des PythonParts beim Doppelcklick auf das PyP durchgeführt.
<Parameter>
<Name>ConcreateGrade</Name>
<Text>Concrete grade</Text>
<Value>C20/25</Value>
<ValueList>C20/25|C25/30</ValueList>
<ValueType>StringComboBox</ValueType>
<AttributeId>1905</AttributeId>
</Parameter>
2. In deinem Skript sorge dafür, dass das Parameterwert ins Attribut geschrieben wird. Z.B. so:
pyp_util = PythonPartUtil()
attribute_list = BuildingElementAttributeList()
attribute_list.add_attribute(1905, build_ele.ConcreteGrade.value)
pyp_util.add_attribute_list(attribute_list)
Nun, dieser Workaround hat seine Schwachstelle. Nämlich: was passiert, wenn du außerhalb des PythonParts dem Attribut ein Wert zuweißt, der nicht in der <ValueList> enthalten ist? Am besten wäre es, dein eigenes Attribut Betonfestigkeitsklasse zu definieren, wo die zulässigen Werte in der Attributdefinition vorhanden sind und der ControlType auf Combobox eingestellt ist. Damit erreichst du 100% Datenkompatibilität. Das Allplan interne Attribut @1905@ kann das nicht sein, weil er international ausgerichtet ist.
Ich hoffe dir weitergeholfen zu haben