1 // SALOME SALOMEGUI : implementation of desktop and GUI kernel
3 // Copyright (C) 2003 CEA/DEN, EDF R&D
7 // File : PyInterp_PyQt.cxx
8 // Author : Christian CAREMOLI, Paul RASCLE, EDF
12 #include "PyInterp_PyQt.h" // this include must be first (see PyInterp_base.h)!
13 #include "utilities.h"
19 * constructor : the main SALOME Python interpreter is used for PyQt GUI.
20 * calls initialize method defined in base class, which calls virtual methods
21 * initstate & initcontext redefined here
23 PyInterp_PyQt::PyInterp_PyQt(): PyInterp_base()
27 PyInterp_PyQt::~PyInterp_PyQt()
31 void PyInterp_PyQt::initState()
34 * The GIL is assumed to not be held on the call
35 * The GIL is acquired in initState and will be held on initState exit
36 * It is the caller responsability to release the lock on exit if needed
38 SCRUTE(PyInterp_base::_gtstate);
39 _tstate=PyInterp_base::_gtstate;
41 PyThreadState_Swap(_tstate);
45 void PyInterp_PyQt::initContext()
48 * The GIL is assumed to be held
49 * It is the caller responsability to acquire the GIL before calling initContext
50 * It will still be held on initContext exit
52 _g = PyDict_New(); // create interpreter dictionnary context
53 PyObject *bimod = PyImport_ImportModule("__builtin__");
54 PyDict_SetItemString(_g, "__builtins__", bimod);
58 void PyInterp_PyQt::run(const char *command)
61 PyLockWrapper aLock(_tstate);
62 PyObject *code = Py_CompileString((char *)command,"PyGUI",Py_file_input);
64 // Une erreur s est produite en general SyntaxError
68 PyObject *r = PyEval_EvalCode(code,_g,_g);
71 // Une erreur s est produite a l execution