【问题标题】:QApplication instance causing python shell to be sluggishQApplication 实例导致 python shell 运行缓慢
【发布时间】:2026-02-02 01:30:01
【问题描述】:

实例化 QApplication 对象后,我的 IPython shell 变得迟缓。例如,即使是从新开始,以下代码也会使我的 shell 变得足够迟钝,以至于我必须重新启动它。

from PyQt4 import QtGui
app = QtGui.QApplication([])

一旦提交,我的打字就会滞后 2 或 3 秒。我的电脑不是很好,但我仍然有足够的可用内存,而且似乎只有 python shell 受到了影响。我已经尝试了默认的 python 解释器和 ipython 解释器,结果相同。有什么建议吗?

更新:我还尝试使用 %run 魔术命令在 ipython 中运行独立的 pyqt“Hello World”程序,当我关闭生成的“Hello World”窗口后将控制权返回给 ipython 时,它具有相同的效果;外壳变得迟钝,我的打字开始滞后 2-3 秒。

【问题讨论】:

  • 我无法重现该问题。你试过“ipython --gui='qt'”吗?
  • 做到了。我不是 100% 确定为什么这会纠正这个问题,但我会阅读 ipython 文档以确切了解它的作用。由于我也在使用 pylab,所以另一个有效的命令是 ipython --pylab qt。谢谢!

标签: python pyqt pyqt4 ipython


【解决方案1】:

这可能会有所帮助:

QtCore.pyqtRemoveInputHook()

当第一次导入 QtCore 模块时,它会安装一个 Python 输入钩子(即,它设置 Python 的 PyOS_InputHook 的值 多变的)。这允许在解释器中输入命令 在应用程序运行时提示。那么就可以 动态创建新的 Qt 对象并调用任何现有的方法 Qt 对象。

输入挂钩可能会导致某些类型的应用程序出现问题, 特别是那些通过不同的方式提供类似设施的 方法。该函数移除了 PyQt 安装的输入钩子。

可以使用 pyqtRestoreInputHook() 恢复输入挂钩 功能。

http://www.riverbankcomputing.com/static/Docs/PyQt4/html/qtcore.html#pyqtRemoveInputHook

【讨论】:

  • 像魅力一样工作。一旦输入钩子关闭,shell 就会再次响应,一旦钩子恢复,它就会变得迟缓。这绝对是罪魁祸首。谢谢!