PythonQt

PythonQT完美将Python与QT结合,项目:https://github.com/MeVisLab/pythonqt(文档https://mevislab.github.io/pythonqt/)

1、脚本放入资源文件的使用方法:(参考PythonQt自带的例子CPPPyWrapperExample)

  可将脚本放入资源文件中,如:/datarequest.py

   A、mainModule.evalFile(":datarequest.py");
      PythonQtObjectPtr tag = mainModule.evalScript("EyeD3Tagger()\n", Py_eval_input);

  B、PythonQt::self()->setImporter(NULL); //这一句很重要
      PythonQt::self()->getMainModule().evalScript("import sys");

     PythonQt::self()->getMainModule().evalScript("sys.path.append(':')"); //这一句很重要

 mainModule.evalScript("import datarequest\n");
      PythonQtObjectPtr tag = mainModule.evalScript("datarequest.DataRequest()\n", Py_eval_input);

 

在PythonQt中evalScript函数不支持Unicode:

 1 QVariant PythonQt::evalScript(PyObject* object, const QString& script, int start)
 2 {
 3   QVariant result;
 4   PythonQtObjectPtr p;
 5   PyObject* dict = NULL;
 6   clearError();
 7   if (PyModule_Check(object)) {
 8     dict = PyModule_GetDict(object);
 9   } else if (PyDict_Check(object)) {
10     dict = object;
11   }
12   if (dict) {
13     p.setNewRef(PyRun_String(script.toLatin1().data(), start, dict, dict));
   //p.setNewRef(PyRun_String(script.toUtf8().data(), start, dict, dict));
14 } 15 if (p) { 16 result = PythonQtConv::PyObjToQVariant(p); 17 } else { 18 handleError(); 19 } 20 return result; 21 }

这是由于函数中第13行将脚本代码(script)传入Python时使用的是 toLation1 函数,这个函数是不支持百拉丁字符的,因此将这个函数替换成 toUtf8即可

    

 

posted @ 2017-05-17 16:46  平凡人  阅读(...)  评论(...编辑  收藏