Невозможно увидеть окна приложений, созданные PySide2 в Spyder - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь запустить приложение с PySide2 из Spyder 3.2.8 и Python 3.6.4 в Anaconda в macOS 10.13.4.

попытка № 1

После просмотра этой страницы stackoveflow и этой страницы github я изменил свой графический интерфейс с Inline на Automatic в Python > Preferences > IPython Console > Graphics и попытался запустить следующий скрипт ( скрипт № 1 ):

скрипт № 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

Есть похожие сообщения о проблемах здесь с matplotlib и здесь с ipython , но это не помогло мне (или я не смог реализовать это должным образом). Затем я попытался реализовать содержимое этой страницы о qtpy , изменив скрипт N ° 1 следующим образом:

скрипт № 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

С Inline выбранным в Python > Preferences > IPython Console > Graphics. Когда я запустил скрипт N ° 2 , приложение запустилось, и я напечатал print something на консоли. При закрытии приложения я получил Out[1]: 0 в консоли. Однако, когда я снова запускаю скрипт, в консоли не появляется сообщение об ошибке, а окно приложения не отображается

попытка № 3

На этот раз с Automatic, выбранным в Python > Preferences > IPython Console > Graphics. Когда я в первый раз запустил скрипт 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

попытка № 4

С Automatic, выбранным в Python > Preferences > IPython Console > Graphics. Когда я запустил скрипт N ° 1 после изменения строки с PySide2.QtWidgets import * на from PyQt5.QtWidgets import *: приложение не запустилось, и я получил следующее сообщение об ошибке

Out[1]: -1

попытка № 5

С Inline, выбранным в Python > Preferences > IPython Console > Graphics. Когда я запустил скрипт N ° 1 после изменения строки с PySide2.QtWidgets import * на from PyQt5.QtWidgets import *: приложение запустилось, и я напечатал print something на консоли. Я закрыл приложение и получил Out[1]: 0 в консоли. Однако, когда я снова запускаю скрипт, в консоли не появляется сообщение об ошибке, но окно приложения не отображается

N.B. этот вопрос является продолжением этого вопроса

1 Ответ

0 голосов
/ 11 мая 2018

( сопровождающий Spyder здесь ) Поскольку пакет ipykernel (который используется Spyder для запуска кода в своих консолях) не имеет поддержки цикла событий для PySide2 по состоянию на май / 2018 г. (как может здесь ), вы не сможете запускать код PySide2 внутри Spyder, независимо от того, что вы пытаетесь .

Примечания :

  1. Бэкэнд Automatic пытается выбрать подходящий для вас цикл событий в следующем порядке: Qt5, Qt4, Tk и Inline. Вот почему это не работает в вашем случае.
  2. Каждый раз, когда вы изменяете графический компонент в Spyder, вам необходимо перезапускать ядро ​​консоли, в которой вы хотите запустить свой код. Это потому, что вы можете использовать только один серверный модуль на сеанс консоли (это ограничение, наложенное ipykernel, не нами). Из твоего вопроса ясно, что ты этого не делаешь.
  3. Нам известно, что мы не информируем пользователей о необходимости перезагрузки ядра. Мы попытаемся решить эту проблему в нашей следующей основной версии (Spyder 4), которая выйдет в 2019 году.
  4. Если вы уже знаете о qtpy, используйте его для разработки своих приложений вместо непосредственного использования PySide2. Таким образом, вы можете работать с PyQt5 для разработки в Spyder, но PySide2 для развертывания, поскольку qtpy обеспечивает бесперебойную работу с любой доступной привязкой.
...