在 Spyder 中看不到由 PySide2 创建的应用程序窗口

Posted

技术标签:

【中文标题】在 Spyder 中看不到由 PySide2 创建的应用程序窗口【英文标题】:Unable to see app windows created by PySide2 in Spyder 【发布时间】:2018-05-09 18:19:57 【问题描述】:

我正在尝试在 macOS 10.13.4 中的 Anaconda 中使用 PySide2Spyder 3.2.8Python 3.6.4 运行应用程序。

尝试 N°1

在看到 stackoveflow page 和 github page 之后,我在 Python > Preferences > IPython Console > Graphics 中将图形后端从 Inline 更改为 Automatic 并尝试运行以下脚本(script N°1 em>):

脚本 N°1

import sys
from PySide2.QtWidgets import *

# Create a Qt application
app = QApplication.instance()
if app is None: 
    print("print something")
    app = QApplication(sys.argv)
# Create a Label and show it
label = QLabel("Hello World")
label.show()
# Enter Qt application main loop
app.exec_()

但运行后得到以下错误信息:

Importing PySide2 disabled by IPython, which has
already imported an Incompatible QT Binding: pyqt5

here with matplotlib 和 here with ipython 报告了类似的问题,但它对我没有帮助(或者我无法正确实施)。然后我尝试通过以下方式更改脚本N°1来实现this page about qtpy的内容:

脚本 N°2

import os
os.environ['QT_API'] = 'pyside2'
from qtpy.QtWidgets import *
import sys

# Create a Qt application
app = QApplication.instance()
if app is None: 
    print("print something")
    app = QApplication(sys.argv)
# Create a Label and show it
label = QLabel("Hello World")
label.show()
# Enter Qt application main loop
app.exec_()

第 2 次尝试

Python > Preferences > IPython Console > Graphics 中选择了Inline。当我运行 script N°2 时,应用程序启动并且我在控制台中打印了print something。关闭应用程序时,我在控制台中收到了Out[1]: 0。但是,当我再次运行脚本时,控制台中没有出现错误消息,但应用程序的窗口没有出现

第 3 次尝试

这次在Python > Preferences > IPython Console > Graphics 中选择了Automatic。当我第一次运行 script N°2 时,应用程序没有启动并且我收到以下错误消息

/anaconda3/lib/python3.6/site-packages/qtpy/__init__.py:178: RuntimeWarning: Selected binding "pyside2" could not be found, using "pyqt5"
'using ""'.format(initial_api, API), RuntimeWarning)
Out[2]: -1

尝试 N°4

Python > Preferences > IPython Console > Graphics 中选择了Automatic。当我在将行从 PySide2.QtWidgets import * 更改为 from PyQt5.QtWidgets import * 后运行 script N°1 时:应用程序没有启动,我收到以下错误消息

Out[1]: -1

第 5 次尝试

Python > Preferences > IPython Console > Graphics 中选择了Inline。当我在将行从 PySide2.QtWidgets import * 更改为 from PyQt5.QtWidgets import * 后运行 script N°1 时:应用程序启动,我将 print something 打印到控制台。我关闭了应用程序并在控制台中获得了Out[1]: 0。但是,当我再次运行脚本时,控制台中没有出现错误消息,但应用程序的窗口没有出现

注意这个问题是that question的延续

【问题讨论】:

pyqt5 一切正常吗? 谢谢@ekhumoro。不,它不适用于 pyqt5。我在使用 pyqt5 时编辑了问题并编写了尝试和输出 我通过在Atom 中使用包scriptshydrogen 运行script N°1 找到了解决问题的方法。这个解决方案并不完美,因为app window 出现在后面(Atom-python-IDE window 后面)==> 您必须在每次打开Atom-python-IDE window 时移动/最小化它才能访问app window。但是,使用此解决方案,您不必在点击退出按钮后手动终止/删除应用程序 【参考方案1】:

此处是 Spyder 维护者)由于 ipykernel 包(Spyder 使用它在其控制台中运行代码)截至 2018 年 5 月不支持 PySide2 的事件循环(如可以看到here),您将无法在 Spyder 中运行 PySide2 代码,无论您尝试什么

注意事项

    Automatic 后端会尝试为您选择合适的事件循环,顺序如下:Qt5、Qt4、Tk 和内联。这就是为什么它不适用于您的情况。 每次在 Spyder 中更改图形后端时,都需要重新启动要在其中运行代码的控制台的内核。这是因为每个控制台会话只能使用一个后端(这是 @987654324 施加的限制@,不是我们)。从您的问题中可以清楚地看出您没有这样做。 我们知道在需要重新启动内核时我们无法通知用户。我们将尝试在 2019 年发布的下一个主要版本(Spyder 4)中解决这个问题。 如果您已经了解qtpy,请使用它来开发您的应用程序,而不是直接使用 PySide2。这样,您可以使用 PyQt5 在 Spyder 中进行开发,但使用 PySide2 进行部署,因为 qtpy 负责与任何可用的绑定无缝协作。

【讨论】:

感谢您的反馈。您能否评论一下 PyQt5 的情况(请参阅问题中的第 5 项尝试)?因为它似乎也不适用于 OP。

以上是关于在 Spyder 中看不到由 PySide2 创建的应用程序窗口的主要内容,如果未能解决你的问题,请参考以下文章

除非我“强制关闭”应用程序,否则在 Windows 中看不到由 Android 应用程序在 SD 卡上写入的文件

cmake 项目在 Visual Studio 2017 中看不到

我创建了一个地面,但我在 openGL 中看不到地面。我该如何解决?

在 Windows 中安装的 MonoDevelop 中看不到 iPhone

PySide2:DLL加载失败:找不到指定的过程

在 Microsoft SQL Server 管理中看不到我的数据库