먼저이 문제에 대한 해결책을 찾기 위해 최선을 다했으며 문제가 무엇인지에 대한 일반적인 생각을 가지고 있지만 해결 방법이 명확하지 않습니다. 그것.PyQT 앱 종료시 분할 오류
기본 문제는 표준 "x"버튼을 눌러 앱을 닫을 때 세그먼테이션 오류가 발생한다는 것입니다.
가장 중요한 세부 사항은 MacOS Sierra, python 3.5.2 및 pyqt5를 사용하고 있다는 것입니다.
내가 개발중인 앱은 비교적 성숙한 프로젝트 인 다른 프로젝트 (Dioptas)를 기반으로합니다. 나는 점점 더 시작하고 있습니다. 내가 창을 닫으면
는 터미널 인쇄 아웃 MainController.close_event()의 지침에 따라 :
> here
> closed
> accepted
> Segmentation fault: 11
나는 온라인으로 많은 제안을 시도하고 난 상당히 확신이 파이썬에 의한 아니라고 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() 창을 닫고 닫힌 창을 바로 닫으려고 ev.accept()? 그러나 나는 "del app"코드 블록에서 세분화 오류가 발생한다고 생각합니다. – obayhan
답장을 보내 주셔서 감사합니다. 내가 언급 한 세 줄을 모두 주석으로 고쳐 봤는데, 똑같은 일이 ....... –
흥미 롭습니다. 코드를 실행하려고하면 어떻게 처리했는지 알 수는 없지만 요점은 그 점입니다. (내가 생각하기에 pyqtgraph 때문에이 오류가 발생합니다) –
obayhan