首先,我尽了最大努力在这里和其他地方找到了解决这个问题的方法,我对问题是什么有一个总体的想法,但是我不清楚如何解决它。退出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
Just thinking - QApplication.closeAllWindows()关闭窗口,ev.accept()尝试关闭关闭的窗口吗?但我认为分段错误发生在底部的“del app”代码块中。 – obayhan
感谢您的回复。 我试着评论你提到的所有三行,同样的事情发生无论.... –
有趣。当我尝试运行代码时,我得到我不知道你是如何处理这个,但也许重点是关于这一点。 (我得到这个错误,因为pyqtgraph我认为) –
obayhan