CPython: reactive UI using Edifice

I want to built a reactive UI in dynamo, has anyone succesfully tried this Using Edifice?
I got it to work but it doesn’t get destroyed after the window is closed. which means i have to close and reopen dynamo before i can run it again.

image image

# Load the Python Standard and DesignScript Libraries
import sys 
import os 
sys.path.append(r'C:\Users\Tim Hevel\AppData\Local\Programs\Python\Python38\Lib\site-packages') 

import datetime
import enum
import pathlib

import edifice as ed
from edifice.components.forms import FormDialog


class Color(enum.Enum):
    RED = 0
    GREEN = 1
    BLUE = 2
    
class nKoppen(enum.Enum):
    koppen2 = 2
    koppen3 = 3
    koppen4 = 4
    
aantal_kozijnen = 5
aantal_penanten = aantal_kozijnen + 1

#for i in range(aantal_kozijnen):
#    f"kozijn {i+1}"
list = ["2 koppen", "3 koppen", "4 koppen", "5 koppen"]

form_data = ed.StateManager({
    "Value 1": 0.1,
    "Value 2": 1.1,
    "Value 3": 1.3,
    "Color": Color.RED,
    "nKoppen": nKoppen.koppen2,
    "File": pathlib.Path(""),
    "Date": datetime.date(1970, 1, 1),
    "Sum": lambda d: d["Value 1"] + d["Value 2"] + d["Value 3"]
})

ed.App(FormDialog(form_data)).start()

OUT = form_data.as_dict()

Hi
you need to shutdown your PyQt Application

import clr
import sys 
import os 
import System
dirAppLocPy3 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData) 
sys.path.append(dirAppLocPy3 + r'\python-3.8.3-embed-amd64\Lib\site-packages')

import datetime
import enum
import pathlib

import edifice as ed
from edifice.components.forms import FormDialog


class Color(enum.Enum):
    RED = 0
    GREEN = 1
    BLUE = 2
    
class nKoppen(enum.Enum):
    koppen2 = 2
    koppen3 = 3
    koppen4 = 4
    
aantal_kozijnen = 5
aantal_penanten = aantal_kozijnen + 1

#for i in range(aantal_kozijnen):
#    f"kozijn {i+1}"
list = ["2 koppen", "3 koppen", "4 koppen", "5 koppen"]

form_data = ed.StateManager({
    "Value 1": 0.1,
    "Value 2": 1.1,
    "Value 3": 1.3,
    "Color": Color.RED,
    "nKoppen": nKoppen.koppen2,
    "File": pathlib.Path(""),
    "Date": datetime.date(1970, 1, 1),
    "Sum": lambda d: d["Value 1"] + d["Value 2"] + d["Value 3"]
})

obj = ed.App(FormDialog(form_data))
obj.start()

obj.app.shutdown()

OUT = form_data.as_dict()

Note
To make a UI, you can also use the .Net Framework with WinForm or Wpf (no package needed)

1 Like

haha thanks i tried everything except that. it worked!

for me .Net is overkill atm. I know Python, is does not have to be pretty, but thanks