Support Forum

Ist dynamisches Generieren von Eingabefeldern möglich mit .pyp [Gelöst]

Schlagworte:
  • PythonParts

Hallo,

ich arbeite aktuell an einem PythonPart, welches eine dynamische Anzahl von geometrischen Objekten generieren soll. Für jedes Objekt möchte ich, dass der Nutzer Parameter, die zur Generierung des Objekts benötigt werden, eingeben kann.

Ist dies möglich innerhalb von .pyp Dateien? Prinzipiell könnte man eine .pyp Datei dynamisch erzeugen, aber dies finde ich eher unelegant.

Lösung anzeigen Lösung verbergen

Hallo rabl_,

eine Beispiel für

- eine dynamischen Liste findest Du in dem Example ValueList (siehe PaletteExamples)
- die Verwendung von include findest Du in IncludeControls (siehe PaletteExamples)
- für die dynamische Erzeugung von GUI-Elementen fehlt leider noch

Viele Grüße
Horst

1 - 10 (16)

"Nein" und "Bloß nicht"

Letzteres (das dynamische Erzeugen der .pyp) wird nicht funktionieren, da diese Datei nur einmal gelesen wird, nämlich wenn die GUI (Palette) initial erzeugt wird.

Das dachte ich mir. Man könnte, wenn man es denn unbedingt so lösen möchte, eine separate .pyp Datei generieren, für jede Instanz des PythonParts, aber ich denke ich werde dann WPF über den CLR Interactor nutzen, um die Nutzeroberfläche für mein PythonPart zu erstellen.

Ist es möglich das WPF Fenster direkt in die Allplan Nutzeroberfläche einzubinden?

..naja, wenn Du den Ineractor von Python meinst/benutzen willst, geht als GUI nur das, was Du mit Python bewerkstelligen kannst.
Ich wüßte nicht, das es für WPF einen Wrapper/Bindings für Python gibt. Für andere GUI-Frameworks schon, z.B. Qt.

Deshalb ist es auch nicht möglich, irgendeinen dieser UI-Dialoge in die Allplan-Benutzeroberfläche zu integrieren.

So etwas geht nur mit der NOI und C++ für die Allplan-Interaktion und C# für die managed WPF-Componenten.

Generell gibt es für PythonParts und auch Visual-Scripting leider die Einschränkung,
dass nur statische Controls in einer Palette möglich sind! Die einzige "Dynamik" besteht darin, die Controls in Abhängigkeit von Werten/Eingängen zu verbergen (Visibility.Collapsed). Aber die Controls müssen eben schon im .pyp definiert sein!

Bei den SmartParts hingegen ist die gesamte GUI gescriptet, und wird bei jeder Eingabe neu aufgebaut!
Ein nicht zu unterschätzender Vorteil , wie ich finde...

Hallo rabl_,

zunächst einmal die Frage, wie Du die Werte eingeben möchtest. In Tabellenform oder blockweise?

Zur dynamischen Gestaltung der Palette hast Du verschiedene Möglichkeiten:

- dynamische Tabelleneingabe
- Verwendung von include Dateien, die die pyp-Datei erweitern
- dynamische Erzeugung der GUI-Elemente im Skript

Du kannst aber auch WPF über pythonnet verwenden. Damit kannst Du beliebige WPF-Dialoge in den PythonParts benutzen. Die Dialoge können als modale oder nicht modale Dialoge verwendet werden, wie im Example UsingClrInteractor gezeigt wird.

Viele Grüße
Horst

Hi Horst,

It seems to me that with a Pythonnet interface, the format comboboxes (pen, line, colour, hatch, pattern, etc) are not available. Is there a solution to have these elements in a Pythonnet interface?
___________

Mir scheint, dass bei einer Pythonnet-Schnittstelle die Format-Comboboxen (Stift, Linie, Farbe, Schraffur, Muster usw.) nicht verfügbar sind. Gibt es eine Lösung, um diese Elemente in einer Pythonnet-Schnittstelle zu haben?


Danke für die Antworten,

Zitiert von: Horst_Hohmann

zunächst einmal die Frage, wie Du die Werte eingeben möchtest. In Tabellenform oder blockweise?
Zur dynamischen Gestaltung der Palette hast Du verschiedene Möglichkeiten:
- dynamische Tabelleneingabe

- Verwendung von include Dateien, die die pyp-Datei erweitern

- dynamische Erzeugung der GUI-Elemente im Skript

die Daten möchte ich in Tabellenform eingeben. Gibt es bezüglich der genannten Möglichkeiten eine Dokumentation dazu, wie man dies tut?
In der offiziellen Dokumentation zu den .pyp Dateien finde ich keine Erwähnung zu dynamischer Tabelleneingabe oder include.
Wie genau würde man GUI-Elemente im Python Programm dynamisch erzeugen lassen?

Oder meintest du, dass es diese Möglichkeiten nur über WPF gibt?

Hi Bertrand,

these controls still exist, please have a look at the Example AllControls in the folder PaletteExamples.

Best regards
Horst

Hallo rabl_,

eine Beispiel für

- eine dynamischen Liste findest Du in dem Example ValueList (siehe PaletteExamples)
- die Verwendung von include findest Du in IncludeControls (siehe PaletteExamples)
- für die dynamische Erzeugung von GUI-Elementen fehlt leider noch

Viele Grüße
Horst

Hi Horst,

Yes, but I talk about Pythonnet. With Pythonnet, I think that we can only use "standard" values (integer, decimal, string), not Allplan specific ones like pens, linetypes, hatching, patterns...
Is there a solution for getting these items in a Pythonnet interface?
Or do you plan to improve PythonParts interface (*.pyp) to have at least the same possibilities as with the SmartParts?


1 - 10 (16)