2013-11-04 19 views
2

目前正在使用pythonQt嵌入python到我的qt應用程序。我需要在我的qt應用程序中實現一個python控制檯,用於處理用戶python代碼:input()或raw_input(),我必須在python中重定向stdin,所以我在我的類中定義了一個靜態方法,顯示一個模態輸入對話,返回文本的用戶輸入:QInputdialog不工作在靜態pythonQt回調

static QString myClass::myStdIn(void *callData) 
{ 
    return QFileInputDialog::getText(NULL,....); 
} 

//then register it to PythonQt in myclass's construct method: 
PythonQt::self().setRedirectStdInCallback(myClass::myStdIn,0); 

這個方法的聲明爲:

void PythonQt::setRedirectStdInCallback (PythonQtInputChangedCB *callback,void *callbackData = 0) 

MyClass的:: myStdIn接縫處必須是一個靜態的註冊爲callback.The問題是,當輸入()或raw_input()在Python中被調用時,應用程序被凍結。我嘗試使用自己的模式對話框來替換QFileInputDialog :: getText(),但只要它是模態對話框,在執行input()之後,應用程序就會凍結並出錯。

任何人都知道如何處理這個問題? 謝謝

回答

0

你有沒有試過看PythonQtScriptingConsole?

connect(PythonQt::self(), SIGNAL(pythonStdOut(const QString&)), this, SLOT(stdOut(const QString&))); 
    connect(PythonQt::self(), SIGNAL(pythonStdErr(const QString&)), this, SLOT(stdErr(const QString&)));