在 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 中使用 PySide2
和 Spyder 3.2.8
和 Python 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
中使用包scripts
和hydrogen
运行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 中看不到地面。我该如何解决?