まず、この問題の解決策を見つけるために最善を尽くしました。問題の概要を知っていますが、解決方法がわかりませんそれ。PyQTアプリケーションを終了するとセグメント化エラーが発生する
基本的な問題は、標準の「x」ボタンを押してアプリケーションを終了するとセグメント化エラーが発生することです。
私はMacOS Sierra、python 3.5.2、pyqt5を使っています。
私が構築しているアプリは、比較的成熟したプロジェクトである別のプロジェクト(Dioptas)に基づいています。私は多かれ少なかれ始めています。私は、ウィンドウを閉じると
は、ターミナルのプリントアウトはMainController.close_event()の指示通り:
> here
> closed
> accepted
> Segmentation fault: 11
私はオンラインの提案の多くを試してみましたが、私はかなり確信している、これはPythonのが原因ではないことQApplication.CloseAllWindows()は、それらが閉じられているという順序のために、すべてのウィンドウを閉じています。誰かが提案や解決策を持っているなら、私は本当にそれを感謝します。
次は私のコードです:
import sys
import pyqtgraph as pg
import numpy as np
from PIL import Image
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class MainController(QWidget):
def __init__(self):
super().__init__
self.start()
self.create_signals()
def start(self):
self.widget = MainWidget()
self.widget.show()
def create_signals(self):
self.widget.closeEvent = self.close_event
def close_event(self, ev):
print("here")
QApplication.closeAllWindows()
print("closed")
ev.accept()
class MainWidget(QWidget):
def __init__(self, *args, **kwargs):
super(MainWidget, self).__init__(*args, **kwargs)
self.layout = QHBoxLayout()
self.layout.setContentsMargins(2, 2, 2, 2)
self.layout.setSpacing(6)
self.stepFilterDisplayWidget = StepFilterDisplayWidget()
self.stepFilterControlWidget = StepFilterControlWidget()
self.layout.addWidget(self.stepFilterDisplayWidget)
self.layout.addWidget(self.stepFilterControlWidget)
self.setLayout(self.layout)
self.setGeometry(100,100,1000,700)
class StepFilterDisplayWidget(QWidget):
def __init__(self, *args, **kwargs):
super(StepFilterDisplayWidget,self).__init__(*args,**kwargs)
self.layout = QVBoxLayout()
self.setLayout(self.layout)
self.plot = pg.ImageView()
self.layout.addWidget(self.plot)
self.button = QPushButton("Plot", self)
self.button.clicked.connect(self.showImage)
self.layout.addWidget(self.button)
def showImage(self):
im = Image.open('S_15a_crop.tif')
self.data = np.array(im)
self.plot.setImage(self.data)
class StepFilterControlWidget(QWidget):
def __init__(self, *args, **kwargs):
super(StepFilterControlWidget, self).__init__(*args, **kwargs)
if __name__ == "__main__":
app = QApplication(sys.argv)
controller = MainController()
app.exec_()
del app
ちょっと考えて - QApplication.closeAllWindows()はウィンドウを閉じて、閉じたウィンドウを右に閉じようとしていますか?しかし、私はセグメンテーションフォールトが "デルアプリ"コードブロックの下部に発生すると思います。 – obayhan
返事をありがとう。 あなたが言及した3つの行すべてをコメントアウトしてみましたが、同じことは関係なく発生します。 –
面白いです。私がコードを実行しようとすると、どのように処理したのか分かりませんが、その点については分かります。 (私は思うpyqtgraphのために私はこのエラーを得ます) –
obayhan