web-dev-qa-db-ja.com

Python PyQt5GUIの2回目の実行でカーネルが停止する

  • Python 3.5.2 | Anaconda 4.2.0(64ビット)WindowsパッケージでSpyderを使用します。qt:5.6.0
  • 最初の実行では、GUIウィンドウが期待どおりに開きます
  • 2回目の実行では、何も開かず、カーネルが停止し、再起動しましたログメッセージを受信します。

gui1.py:

import sys from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)

w = QWidget()

w.resize(250,150) w.show()

#sys.exit(app.exec_()) 
app.exec_()

IPhythonログ:

runfile('F:/work/ws_python/TestProj1/gui1/gui1.py', wdir='F:/work/ws_python/TestProj1/gui1')

runfile('F:/work/ws_python/TestProj1/gui1/gui1.py', wdir='F:/work/ws_python/TestProj1/gui1')

Kernel died, restarting

Kernel died, restarting

Kernel died, restarting

カーネルが2回目の実行で死ぬのはなぜですか?それを解決する方法は?

(最後の行として#sys.exit(app.exec_())を使用しても同じことを行います。)

12
Daniel Hári

ヒントをありがとう、このコードは問題を修正しました。

app = QtCore.QCoreApplication.instance()
if app is None:
    app = QtWidgets.QApplication(sys.argv)
11
Corky Benson

これは、カーネルが停止し、再起動エラーが発生した場合に適しています。

from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5.QtCore import QCoreApplication

#app = QApplication(sys.argv)
app = QCoreApplication.instance()
if app is None:
    app = QApplication(sys.argv)
2
badsaah6

私の場合、上記の解決策は機能しましたが、メインウィンドウを閉じるために(ウィンドウ装飾からの)ウィンドウを閉じるボタンが使用されている場合に限ります。しかし、プログラムがGUIシグナルハンドラーから終了したとき、問題は依然として存在していました。クリックされているボタンに。何度もいじった後、この状況で終了するための十分に安全な方法は次のとおりであることを学びました。

def safeExit(self):
    """exit the application gently so Spyder IDE will not hang"""
    self.ui.deleteLater()
    self.ui.close()
    self.ui.destroy()


... self.ui.Button2.clicked.connect(self.safeExit) ...
0
T.E.