virtual bool OnInit();
virtual ~MyApp();
void Init_wxPython();
-private:
- PyThreadState* main_tstate;
};
// module and sets a pointer to a function table located there.
wxPyCoreAPI_IMPORT();
+ // Ensure that the new classes defined in the wxPython wrappers are
+ // recognised by the wx RTTI system. (If you don't use wxWindows in
+ // your C++ app you won't need to do this.)
+ wxClassInfo::CleanUpClasses();
+ wxClassInfo::InitializeClasses();
+
// Save the current Python thread state and release the
// Global Interpreter Lock.
- main_tstate = wxPyBeginAllowThreads();
+ wxPyBeginAllowThreads();
}
MyApp::~MyApp()
{
// Restore the thread state and tell Python to cleanup after itself.
- wxPyEndAllowThreads(main_tstate);
+ wxPyEndAllowThreads(true);
Py_Finalize();
}
// First, whenever you do anyting with Python objects or code, you
// *MUST* aquire the Global Interpreter Lock and block other
// Python threads from running.
- wxPyBeginBlockThreads();
+ bool blocked = wxPyBeginBlockThreads();
// Execute the code in the __main__ module
PyRun_SimpleString(python_code1);
// Finally, release the GIL and let other Python threads run.
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
}
output = wxPyOnDemandOutputWindow()\n\
sys.stdin = sys.stderr = output\n\
";
- wxPyBeginBlockThreads();
+ bool blocked = wxPyBeginBlockThreads();
PyRun_SimpleString(python_redirect);
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
}
// More complex embedded situations will require passing C++ objects to
// Python and/or returning objects from Python to be used in C++. This
// sample shows one way to do it. NOTE: The above code could just have
- // easily come from a file, or the whole thing coupld be in the Python
+ // easily come from a file, or the whole thing could be in the Python
// module that is imported and manipulated directly in this C++ code. See
// the Python API for more details.
PyObject* result;
// As always, first grab the GIL
- wxPyBeginBlockThreads();
+ bool blocked = wxPyBeginBlockThreads();
// Now make a dictionary to serve as the global namespace when the code is
// executed. Put a reference to the builtins module in it. (Yes, the
Py_DECREF(tuple);
// Finally, after all Python stuff is done, release the GIL
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
return window;
}