是的,GUI是冻结的,因为长时间调用Python是通过UI线程执行的。为了解决这个问题,我可以继承QThread并通过命令模式将命令发布到Python模块中。
在开始使用以下类对多个Python模块进行调用之前,请确保通过调用PyEval_InitThreads()来初始化线程支持,如您在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 (if it has bee