For gui apps, what worked for me was building all the functionality in Nim, and
compiling to a library, with nimpy providing python export pragma. On the
python side, as long as the (.so) library is in your path, it should be able to
find it, and simply use it right away. For using python in Nim, you need a more
complicated process because of type conversions For gui, I have used Kivy in
python (which I liked, only abandoned because I wanted to target android and
building for it was too buggy, slow and messy), but later switched to flutter
and dart. Flutter is really nice, in my opinion. dart has an ffi but it's not a
pleasant one to use, though it doesn't matter much. porting from/to dart is not
a big deal too, if you're into flutter (I use the nim-classes package for that,
which matches pretty well the semantics) QML can be a good option though I
haven't tried it recently or with Nim. If the application is a simple one, you
can get by with nimx or lately fidget, but they lack ready made widgets. There
was nigui as well for abstraction, but again lack of widgets spoiled this
option.