app.exec из PyQt5 блокирует код при использовании spyder 3.3.3 с ipython 7.4 - PullRequest
0 голосов
/ 12 апреля 2019

Я установил последнюю версию anaconda (1.9.7), которая включает в себя python 3.7.3, spyder 3.3.3, ipython 7.4.0, pyqt 5.9.2, и теперь у меня возникают проблемы при запуске кода, который работал нормальнос предыдущей установкой anaconda (anaconda 1.7.0, python: 3.6.4, Ipython: 6.2.1 и spyder: 3.2.6).Я проверил, что spyder -> Tool -> preference -> Ipython-консоль одинаковы для обеих установок.

Вот код:

import sys
from PyQt5 import QtWidgets

if __name__ == '__main__':

if not QtWidgets.QApplication.instance():
    app = QtWidgets.QApplication(sys.argv)
else:
    app = QtWidgets.QApplication.instance() 
T = QtWidgets.QErrorMessage()
T.setWindowTitle('Error!')
T.showMessage('some message')
T.show()
app.exec()

Так что в основном, когда я запускаюкод (выше) я вижу, что мой графический интерфейс открывается.Однако, когда я закрываю GUI (используя X на правой стороне GUI), консоль IPython зависает, и у меня нет выбора перезапустить spyder (ctr C ничего не делает в этом случае).Я обнаружил, что могу решить эту проблему, удалив строку: 'app.exec ()'.Однако в большинстве случаев я запускаю свой код из приглашения anaconda, поэтому я не хочу удалять app.exec () из моего кода.Этот код хорошо работал с предыдущей установкой как с приглашением anaconda, так и со spyder (так в основном с и без использования ipython).

Я пробовал Инструменты -> Консоль Ipython -> Графика -> Бэкэнд -> Автоматически, и это ничего не меняет.Если снять флажок «Активировать поддержку» (Инструменты -> Консоль Ipython -> Графика), это решит проблему, но я не хочу идти в этом направлении, потому что обнаружил, что не смогу правильно использовать matplotlib (графики не будут отображаться без plt.show (), и это заблокирует ipython) (при предыдущей установке была отмечена опция «Активировать поддержку»).Конечно, я могу вернуться к предыдущей установке, но я хочу избежать этого, поскольку у меня есть другие проблемы со старой установкой (и я считаю, что последняя версия должна работать нормально).Я знаю, что могу решить эту проблему временно (удаляя app.exec (), когда я использую spyder или сниму флажок «Активировать поддержку»), но мне было интересно, что я что-то упустил или это проблема, связанная с новым ipython.Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения.

1 Ответ

0 голосов
/ 12 апреля 2019

( Сопровождающий Spyder здесь ) Вы сказали

Я обнаружил, что могу решить эту проблему, удалив строку: 'app.exec ()'.

Итак, если вы хотите запускать свой код в Spyder и выходить из него, вы можете заключить эту строку в следующий if блок:

import os
if not os.environ.get('SPY_UMR_ENABLED'):
    app.exec()

Это позволит избежать его запуска в Spyder, поскольку переменная окружения SPY_UMR_ENABLED присутствует в наших консолях, но отсутствует в приглашении Anaconda или записной книжке Jupyter.

...