PySide Qt的脚本不从Spyder的推出而从壳工程(PySide Qt script does

2019-06-24 16:22发布

我在我的项目中一个奇怪的错误,使用PySide其Qt的图形用户界面,并响应我试图与设置环境简单的代码进行测试。

这里是我与测试代码: https://stackoverflow.com/a/6906552/130164

当我启动,从我的壳( python test.py ),它完美的作品。 然而,当我运行的Spyder该脚本,我得到以下错误:

Traceback (most recent call last):
  File "/home/test/Desktop/test/test.py", line 31, in <module>
    app = QtGui.QApplication(sys.argv)
RuntimeError: A QApplication instance already exists.

如果有帮助,我也得到了以下警告:

/usr/lib/pymodules/python2.6/matplotlib/__init__.py:835: UserWarning:  This call to matplotlib.use() has no effect
because the the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.

为什么从我的外壳从Spyder的推出了代码工作的时候而不是?


更新:马塔回答这种情况发生的问题,因为Spyder的使用Qt,这是有道理的。 现在,我已经使用了“执行在外部系统终端”的选项,这不会导致错误,但不允许调试,无论是设立执行中的Spyder。 是否Spyder的任何内置的解决方法呢?

Answer 1:

作为Spyder也是一个Qt应用程序,它开始它自己QApplication 。 在同一个进程只有一个QApplication可以存在,这就是为什么你得到的第一个错误。

Sypder也使用matplotlib ,大概,therfore它已经将已导入所提到的一些模块,所以这就是为什么你的第二个错误。

所以,这样的全光照时,你无法创建自己QApplication或致电matplotlib.use() 或者,也许你在包装这些调用,将工作try / except



Answer 2:

我有同样的问题,并在某处计算器是一个解决方案。

代替

qApp = QtGui.QApplication(sys.argv)

使用

qApp = QtGui.QApplication.instance()
if qApp is None:
        qApp = QtGui.QApplication(sys.argv)


Answer 3:

如果您尝试启动应用程序到交互式控制台,因为控制台专门配置为导入多个科学图书馆,它不会工作在Spyder的,自动show() matplotlib的数字,和一些其他细节。 键入scientific的更多详细信息,Spyder的控制台提示符。 其结果是有效的,一个Qt应用程序事件循环已经在那里运行。

为了让您的应用程序的Spyder内运行:

  1. 确保Spyder的配置为打开与PySide而不是PyQt的外部控制台。 这可以从工具>首>控制台>外部模块> Qt的Python绑定文库选择来设置。
  2. 随着你在编辑器脚本活跃,打F6打开运行设置对话框。 选择“在执行新的专用Python解释器”单选按钮,而不是在目前的交互式解释执行。 点击OK 。 现在运行通过点击脚本F5 。 通过点击调试脚本Ctrl+F5


文章来源: PySide Qt script doesn't launch from Spyder but works from shell