From b62040783613568901e76a26799e130632004a7e Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 5 Jan 2021 13:44:24 +0100 Subject: scriptable application: Actually make the generated module available A call to PyImport_AppendInittab() before Py_Initialize() is required to be able to import the module. Previously, the example would only add the instance of the mainwindow under the "__main__" module. Pick-to: 6.0 Task-number: PYSIDE-841 Change-Id: Ib87ddd9fa9e4dbdcf413abe1d9e6273811fc414c Reviewed-by: Christian Tismer --- examples/scriptableapplication/mainwindow.cpp | 1 + examples/scriptableapplication/pythonutils.cpp | 17 +++++++---------- 2 files changed, 8 insertions(+), 10 deletions(-) (limited to 'examples/scriptableapplication') diff --git a/examples/scriptableapplication/mainwindow.cpp b/examples/scriptableapplication/mainwindow.cpp index 315ea227e..15c8b59f0 100644 --- a/examples/scriptableapplication/mainwindow.cpp +++ b/examples/scriptableapplication/mainwindow.cpp @@ -67,6 +67,7 @@ #include static const char defaultScript[] = R"( +import AppLib print("Hello, world") mainWindow.testFunction1() )"; diff --git a/examples/scriptableapplication/pythonutils.cpp b/examples/scriptableapplication/pythonutils.cpp index eef2fada7..18ac35112 100644 --- a/examples/scriptableapplication/pythonutils.cpp +++ b/examples/scriptableapplication/pythonutils.cpp @@ -64,11 +64,8 @@ /* from AppLib bindings */ -#if PY_MAJOR_VERSION >= 3 - extern "C" PyObject *PyInit_AppLib(); -#else - extern "C" void initAppLib(); -#endif +extern "C" PyObject *PyInit_AppLib(); +static const char moduleName[] = "AppLib"; // This variable stores all Python types exported by this module. extern PyTypeObject **SbkAppLibTypes; @@ -111,15 +108,15 @@ State init() if (qEnvironmentVariableIsSet(virtualEnvVar)) initVirtualEnvironment(); + if (PyImport_AppendInittab(moduleName, PyInit_AppLib) == -1) { + qWarning("Failed to add the module '%s' to the table of built-in modules.", moduleName); + return state; + } + Py_Initialize(); qAddPostRoutine(cleanup); state = PythonInitialized; -#if PY_MAJOR_VERSION >= 3 const bool pythonInitialized = PyInit_AppLib() != nullptr; -#else - const bool pythonInitialized = true; - initAppLib(); -#endif const bool pyErrorOccurred = PyErr_Occurred() != nullptr; if (pythonInitialized && !pyErrorOccurred) { state = AppModuleLoaded; -- cgit v1.2.3