目前正在使用pythonQt将python嵌入到我的qt应用程序中。我需要在我的qt app中实现一个python控制台,用于处理用户python代码:input()或raw_input(),我必须在python中重定向stdin,所以我在我的类中定义一个静态方法,显示一个模态inputdialog ,返回文本用户输入:
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接缝必须是静态的,才能被注册为回调。问题是,当在python中调用input()或raw_input()时,应用程序会冻结。我尝试使用自己的模态对话框来替换QFileInputDialog :: getText(),但只要它是一个模态对话框,在执行input()之后,应用程序就会冻结并出错。
任何人都知道如何处理这个问题? 感谢
答案 0 :(得分: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&)));