是的,GUI冻结了,因为对Python的长时间调用是通过UI线程执行的。为了解决这个问题,我可以将QThread子类化,并通过命令模式向Python模块发出命令。在
在开始使用以下类调用多个Python模块之前,请确保通过调用PyEval_InitThreads()来初始化Python中的线程支持,如您将在my main()函数中看到的那样。在
祝你好运!在int main( int argc, char **argv ) {
QApplication qapp(argc, argv);
PyEval_InitThreads(); // IMPORTANT
PythonQt::init(PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut);
PythonQtObjectPtr module = PythonQt::self()->createUniqueModule();
ThreadedPythonContext context(module);
context.start();
# issue some commands into the module
context.issue("import sys");
context.issue("sys.path.append('C:\\Python27\\Lib\\site-packages')");
context.issue("import time");
context.issue("last = time.localtime().tm_sec");
// Release the global interpreter lock