2

目前正在使用 pythonQt 将 python 嵌入到我的 qt 应用程序中。我需要在我的 qt 应用程序中实现一个 python 控制台,用于处理用户 python 代码:input() 或 raw_input(),我必须在 python 中重定向标准输入,所以我在我的类中定义了一个静态方法,显示一个模式输入对话框,返回文本用户输入:

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 seams 必须是静态才能注册为回调。问题是,当在 python 中调用 input() 或 raw_input() 时,应用程序冻结。我尝试使用自己的模态对话框来替换 QFileInputDialog::getText(),但只要它是模态对话框,在执行 input() 后,应用程序将冻结并出现错误。

任何人都知道如何处理这个问题?谢谢

4

1 回答 1

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&)));
于 2016-03-01T03:56:38.303 回答