2016-11-30 21 views
1

まず、この問題の解決策を見つけるために最善を尽くしました。問題の概要を知っていますが、解決方法がわかりませんそれ。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 
+0

ちょっと考えて - QApplication.closeAllWindows()はウィンドウを閉じて、閉じたウィンドウを右に閉じようとしていますか?しかし、私はセグメンテーションフォールトが "デルアプリ"コードブロックの下部に発生すると思います。 – obayhan

+0

返事をありがとう。 あなたが言及した3つの行すべてをコメントアウトしてみましたが、同じことは関係なく発生します。 –

+0

面白いです。私がコードを実行しようとすると、どのように処理したのか分かりませんが、その点については分かります。 (私は思うpyqtgraphのために私はこのエラーを得ます) – obayhan

答えて

2

問題は(PyQt4を使用しています)pyqtgraphとPyQt5の輸入についてです。 pyqtgraphはPyQt5のインポートによって上書きされたPyQt4に属しています。これにより、セグメント化障害がトリガされます。

+1

update:私は3.5.2からPython 3.6にアップグレードしましたが、これはもはや問題ではありません。 –

+0

おそらくpyqtgraphはpython3またはそれより新しいバージョンでpyqt5を使用しています – obayhan

関連する問題