Servus zusammen!
Ich habe folgende Aufgabe: eine Makro-Gruppe (bzw. PythonPart-Gruppe) aus mehreren, identischen Makros in einem regelmäßigen Raster zu erzeugen, jedoch mit der Möglichkeit, einzelne Makros in diesem Raster ausschalten zu können. Dafür habe ich folgenden Parameter definiert
<Parameter> <Name>Create_macro</Name> <Text>Makro erzeugen ja/nein</Text> <Value>[[True, True], [True, True]]</Value> <ValueType>CheckBox</ValueType> <Dimensions>Count_z,Count_y</Dimensions> </Parameter>
Wo Count_z und Count_y die Anzahl der Elemente in entsprechender Richtung definieren, die aber in einem anderen Integer-Parameter definiert sind. So weit so gut - der Parameter erscheind richtig in der Palette und mach seine Aufgabe.
Mein Problem beginnt, wenn ich einen Click-Handle erzeugen will, um diesen Parameter zu steuern. Denn in der Dokumentation der Klasse HandleParameterData steht, dass man den Handle schon mit einem konkreten Element des List-Parameters verknüpfen kann, den man in dem Argument list_index angibt:
class HandleParameterData.HandleParameterData(param_prop_name: str, param_type: HandleParameterType, has_input_field: bool = True, show_negative_value: bool = False, check_box_state: bool = True, in_decrement_value: Any = 1, list_index: Optional[int] = None)
Aber der Index muss als Integer angegeben werden. Mit eindimensionalen List-Parameter funktioniert es, aber um auf einen Element eines zweidimensionalen List-Parameters zuzugreifen, muss ich doch den Index mit zwei Integer definieren - die Spalten- und Zeilennummer. Wenn ich das Probiere, mit folgendem Syntax:
creation_handle_parameter_data = HandleParameterData (param_prop_name = "Create_macro", param_type = HandleParameterType(13), list_index = [i,j])
Wo i und j Integer sind, bekomme ich folgende Meldung im Trace:
Traceback (most recent call last): File "C:\ProgramData\Nemetschek\Allplan\2022\Etc\PythonPartsFramework\GeneralScripts\BuildingElementInput.py", line 686, in process_mouse_msg BuildingElementInputService.move_handle(self, AllplanGeo.Point3D()) File "C:\ProgramData\Nemetschek\Allplan\2022\Etc\PythonPartsFramework\GeneralScripts\BuildingElementInputService.py", line 189, in move_handle handle_result = input_data.build_ele_script.move_handle(input_data.build_ele_list[0], \ File "C:\Data\Allplan\2022\Std\PythonPartsScripts\MyPythonParts\Macros_grid.py", line 49, in move_handle build_ele.change_property(handle_prop, input_pnt) File "C:\ProgramData\Nemetschek\Allplan\2022\Etc\PythonPartsFramework\GeneralScripts\BuildingElement.py", line 657, in change_property not PropertyUtil.get_property_value(prop, item_name)) File "C:\ProgramData\Nemetschek\Allplan\2022\Etc\PythonPartsFramework\GeneralScripts\BuildingElementParameterPropertyUtil.py", line 633, in get_property_value return eval(name.replace("(", "[").replace(")", "]"), File "<string>", line 1, in <module> TypeError: list indices must be integers or slices, not list
Mache ich etwas falsch in dem Syntax, oder ist das einfach nicht machbar?