On 13Apr2020 2105, Chris Meyer wrote:
How would I call a Python function from the C++ application that returns a Python object to C++ and then call a method on that Python object from C++?
My specific example is that I create Python handlers for Qt windows and then from the Qt/C++ I call methods on those Python objects from C++ such as “handle mouse event”.
You're in a bit of trouble here regardless, depending on how robust you need to be. If you've only got synchronous, single-threaded event handlers then you'll be okay. Anything more complex and you'll have some fun debugging sessions to look forward to. I would definitely say look at PyBind11. A while ago I posted a sample using this to embed Python in a game engine at https://devblogs.microsoft.com/python/embedding-python-in-a-cpp-project-with... (VS is not required, it just happened to be the hook to do the post/video ;) ) To jump straight to the code, go to https://github.com/zooba/ogre3d-python-embed/blob/master/src/PythonCharacter... and search for "py::", and also https://github.com/zooba/ogre3d-python-embed/blob/master/src/ogre_module.h PyBind11 is nice for avoiding the boilerplate and ref-counting, but has its own set of obscure error cases. It's also not as easy to debug as Cython or going straight to the Python C API, depending on what the issue is, as there's no straightforward generated code. Even stepping through the templated code interactively in VS doesn't help make it any easier to follow. Cheers, Steve