2009-06-30 122 views
0

我想从不是立即返回的python脚本调用一个包装的C++函数(详细地说:它是一个启动QApplication窗口的函数,函数是QApplication-> exec())。所以在这个函数调用之后,我想继续到Python脚本中的下一行,但执行该脚本和上一行时,它会永久挂起。从python脚本中调用非返回的python函数

相反,当我在python命令行中手动输入我的脚本行时,我可以在非返回函数调用行上再按一次第二次输入后继续我的下一行。

那么如何解决执行脚本时的问题呢?

谢谢!

编辑:

我的python解释器被嵌入到应用程序中。我想为这个应用程序编写一个扩展,作为一个单独的Qt4窗口。所有的Python的东西只是为了让我的图形插件可以访问每个脚本(每boost.python包装)。

我的Python脚本:

import imp 
import os 
Plugin = imp.load_dynamic('Plugin', os.getcwd() + 'Plugin.dll') 

qt = Plugin.StartQt4()  # it hangs here when executing as script 
pl = PluginCPP.PluginCPP() # Creates a QMainWindow 
pl.ShowWindow()   # shows the window 

对Qt的启动功能的C++代码如下所示:

class StartQt4 
{ 
public: 
    StartQt4() 
    { 
    int i = 0; 
    QApplication* qapp = new QApplication(i, NULL); 
    qapp->exec(); 
    } 
}; 
+1

请给我们的代码。 – 2009-06-30 09:02:22

回答

2

使用一个线程(longer example here):

from threading import Thread 

class WindowThread(Thread): 
    def run(self): 
     callCppFunctionHere() 

WindowThread().start() 
+0

我认为这会很好,但不是在我的情况。一切都应该在同一个线程中运行。 – 2009-06-30 10:14:29

1

的QApplication: :exec()启动应用程序的主循环,并且仅在应用程序退出后才会返回。如果你想在应用程序启动后运行代码,你应该使用Qt的事件处理机制。

http://doc.trolltech.com/4.5/qapplication.html#exec

为了使您的应用程序执行闲置 处理,即执行特殊的 功能,只要没有未决 事件,使用QTimer 0超时。 可以使用processEvents()来实现更高级的空闲处理方案 。

0

我假设您已经使用PyQT

+0

不,我只使用python来启动我的Qt窗口。这个C++代码用boost.python封装到python中 – 2009-06-30 10:12:57