Support Forum

[Frage] Palette/Pyp File


Hello,

I have built this simple UI as an exercise for Python parts. My problem is as follows:
I want to show or hide elements on Page2 depending on whether the checkbox 2 is checked.
However, this only works if checkbox 1 is also checked.

I don't understand the connection here. Since I'm not very familiar with the .pyp structure, I ask for help.

Anhänge (2)

Typ: text/xml
321-mal heruntergeladen
Größe: 6,26 KiB
Typ: image/png
28-mal heruntergeladen
Größe: 48,29 KiB

Zitiert von: Michael_Bulant
Hello,
I have built this simple UI as an exercise for Python parts. My problem is as follows:

I want to show or hide elements on Page2 depending on whether the checkbox 2 is checked.

However, this only works if checkbox 1 is also checked.
I don't understand the connection here. Since I'm not very familiar with the .pyp structure, I ask for help.

Hi,

apparently PythonPartsFramework does not update the palette, when the first checkbox is unchecked. I don't know why, but you can make him do so by adding this function to your script:

def modify_control_properties(build_ele: BuildingElement,
                              ctrl_prop_util: ControlPropertiesUtil,
                              value_name: str,
                              event_id: int,
                              doc: AllplanElementAdapter.DocumentAdapter) -> bool:
    """Called after each change within the property palette

    Args:
        build_ele:      building element
        ctrl_prop_util: control properties utility
        value_name:     name(s) of the modified value (multiple names are separated by ,)
        event_id:       event ID
        doc:            document

    Returns:
        True if an update of the property palette is necessary, False otherwise
    """

    return True

It gets called every time, there is a change in the property palette and at the end you return a Boolean value: True means that the palette should be updated. In the above implementation True is return always, so the palette gets updated with every change in the palette (like unchecking a checkbox). This might slow down a PythonPart, but in your case there will be no significant drop in performance.

While looking on your problem, I've discovered that you added tags Visible and Enable to the first page:

    <Page>
        <Name>FirstPage</Name>
        <Text>First page</Text>
        <TextId>1001</TextId>
        <Visible>True</Visible>
        <Enable>True</Enable>[code]
But with this you basically overrides these tags in each parameter inside this page. This is why the enable condition in the parameter [i]Sturzplattenstärke[/i]...
[code]            <Parameter>
                <Name>Sturzplattenstärke</Name>
                <TextId>1010</TextId>
                <Value>150</Value>
                <MinValue>120</MinValue>
                <MaxValue>200</MaxValue>
                <ValueType>Length</ValueType>
                <Enable>SP_Dicke_ist_Schachtdicke == False</Enable>
                <BackgroundColor>(164, 164, 164) if SP_Dicke_ist_Schachtdicke == True else (-1, -1, -1) </BackgroundColor>
            </Parameter>

... doesn't work. It gets overridden by the one from the <Page> tag. Remove them and you can get rid of the BackgroundColor (which by the way gets ignored when changing pages - it's a bug we need to fix).
For the parameter Schachtelemente I would recommend you to use a list of tuples or even better namedtuples (see attached PYP file). ListGroups are OK, but it's much more text in the PYP file.

Hope that helps.

Best,
Bart

Anhänge (1)

Typ: text/xml
247-mal heruntergeladen
Größe: 4,21 KiB

Thank you for this detailed response and these tips.