Я получаю странное поведение, которое происходит в OSX, но не в Windows.
Я сделал программное обеспечение с pyqt5, и когда я закрываю дочернее окно, у меня происходит сбой с «Ошибка сегментации: 11»
Чтобы объяснить лучше, у меня есть главное окно, где я могу открыть другие окна, чтобы попросить пользователя некоторую информацию. ошибка происходит, когда я закрываю это второе окно.
У меня есть closeEvent
функция:
def closeEvent(self, event):
self.Close_OBJ.emit()
self.close()
, которые отправляют pyqtSignal
в главное окно.
Если я прокомментирую self.Close_OBJ.emit()
У меня больше нет ошибки сегментации, но мне нужно это, чтобы мое главное окно могло реагировать на закрытие этого дочернего окна.
Что также сбивает с толку, так это то, что у меня есть другие дочерние окна, в которых у меня есть такая же функция closeEvent
, и она работает хорошо.
Я не понимаю, почему у меня нет этой проблемы в ОС Windows.
Вот минимальный пример проблемы:
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
class Modify_1_NMM(QMainWindow):
Close_OBJ = pyqtSignal()
def __init__(self,):
super(Modify_1_NMM, self).__init__()
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.mainHBOX_param_scene = QHBoxLayout()
self.label = QLabel('Please, close this window')
self.mainHBOX_param_scene.addWidget(self.label)
self.centralWidget.setLayout(self.mainHBOX_param_scene)
def closeEvent(self, event):
self.Close_OBJ.emit()
self.close()
class StimEdit(QMainWindow):
def __init__(self, parent=None):
super(StimEdit, self).__init__()
self.NewModifyXNMM = None
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.mainHBOX_param_scene = QHBoxLayout()
self.B = QPushButton('clik here to open o window')
self.B.setFixedSize(400,200)
self.B.clicked.connect(self.ModXNMMclicked)
self.mainHBOX_param_scene.addWidget(self.B)
self.centralWidget.setLayout(self.mainHBOX_param_scene)
def ModXNMMclicked(self,):
if self.NewModifyXNMM == None:
self.NewModifyXNMM = Modify_1_NMM()
self.NewModifyXNMM.Close_OBJ.connect(self.close_ModXNMM)
self.NewModifyXNMM.show()
@pyqtSlot()
def close_ModXNMM(self):
print('about to close',self)
self.NewModifyXNMM = None
print('did closed')
def main():
app = QApplication(sys.argv)
ex = StimEdit(app)
ex.show()
sys.exit(app.exec_( ))
if __name__ == '__main__':
main()
когда я нажимаю на кнопку в главном окне, открывается второе окно. Когда я закрываю второе окно, оно падает (даже не все время ... но большую часть времени).
На pycharm я получаю это сообщение об ошибке:
about to close <__main__.StimEdit object at 0x103f0af78>
did closed
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
и на терминале я получаю:
about to close <__main__.StimEdit object at 0x10c706288>
did closed
Segmentation fault: 11
UPDATE
если я закомментирую строку self.NewModifyXNMM = None
У меня больше нет ошибки сегментации. Возможно ли, что эта строка находится в конфликте с закрытием окна?