[Question] Visibility von Expander

Balises:
  • Allplan 2025 WIP

Hallo zusammen,

ist es möglich die Visibility von Expander auch zur Laufzeit über ein script-object im Python-Script zu ändern. Ich möchte sobald ein bestimmtes Event auftritt den nächsten Expander anzeigen. Dieser wird beim Starten des Programms mit Visibility=False initialisiert. Für die meisten UI-Elemente scheint dies kein Problem zu sein, beim Expander bekommen ich jedoch einen Key-Error beim Zugriff auf das Feld.

Vielleicht hatte schon jemand einen ähnlichen Fall oder Erfahrung?

Viele Grüße,
Bastian

<Parameter>
<Name>Expander01</Name>
<Test>Test</Text>
<ValueType>Expander</ValueType>
<Visible>expander_vis=True</Visible>

...

</Parameter>

Den Expander(-Parameter) selber kann man im Python-Script nicht aufrufen.
Z.b. geht das NCHT:

build_ele.Expander01.Visible = True

Bei anderen Controls funktioniert es so, dass man in der Pyp-Datei die Sichtbarkeit
an einen Parameter koppeln kann. Z.b an "ctrl_vis" (siehe oben),
wobei expander_vis dann ein Parameter ist:

<Name>__HiddenPage__</Name>
<Parameter>
<Name>expander_vis</Name>
<Value>False</Value>
<ValueType>CheckBox</ValueType>
</Parameter>
</Page>

Wichtig: Wenn man den Parameter-Wert ändert, z.B. durch

build_ele.expander_vis.value=True

sollte man das in

def modify_element_property(build_ele: BuildingElement,
                            name: str,
                            value: Any):

tun, und

return True

zurückgeben, damit die Palette aktualisiert wird.
Wenn man das "woanders" machen möchte, müßte man

self.palette_service.update_palette(-1, False/True)

aufrufen.

Prinzipiell sollte das auch bei dem Control Expander funktionieren.

Edit: Ich habe es getestet, und es funktioniert auch mit dem Expander (s.ColumnExpander.mp4)
Dazu habe ich die Column1.pyp aus den ContentExamples etwas modifiziert. (s.column1.zip)

Pièces-jointes (2)

Type: video/mp4
Téléchargé 86 fois
Size: 1,19 MiB
Type: application/zip
Téléchargé 76 fois
Size: 568,00 B

Danke für die Antwort.

Verstehe ich es richtig, dass dies dann nur möglich ist über ein weiteres Elemente (Checkbox) in der Oberfläche. Ich möchte eigentlich keine Nutzer Interaktion in Allplan direkt haben.

Kannst du mir außerdem sagen, ob dies so von einem Interactor auch auf ein ScriptObject übertragbar ist?

Danke und viele Grüße,
Bastian

Man braucht dafür auf jeden Fall einen Parameter.
Dieser muß aber nicht in der Palette sichtbar sein.
Hier die Parameter-Definition für einen unsichtbaren Parameter "expander_vis" in einer
"versteckten" Seite:

<Page>
<Name>__HiddenPage__</Name>
<Parameter>
<Name>expander_vis</Name>
<Value>False</Value>
<ValueType>CheckBox</ValueType>
</Parameter>
</Page>

Wenn man diesen Parameter-Wert ändert, z.B. durch

build_ele.expander_vis.value=True

sollte man das in

def modify_element_property(build_ele: BuildingElement,
                            name: str,
                            value: Any):

tun, und

return True

zurückgeben, damit die Palette aktualisiert wird.

Das habe ich doch schon alles geschrieben!

Das obige Vorgehen ist für ein Script-Object gedacht. Von Interactor habe ich nichts gesagt!

Das würde es aber ähnlich funktionieren.