Ошибка сегментации PySide при создании экземпляра QObject - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть класс, который является основой для моих других не-qt классов. Этот класс создает экземпляр класса QObject с экземпляром Signal. К сожалению, иногда возникает ошибка ошибки сегментации. Вот мой код:

class PublisherSignal(QObject):
    notify = Signal(list)


class PublisherBase:
    def __init__(self, *args, **kwargs):
        super(PublisherBase, self).__init__(*args, **kwargs)
        self._signal = PublisherSignal()

Обработчик ошибок показывает, что ошибка сегментации происходит в экземпляре класса PublisherSignal(). Это не всегда. В большинстве случаев работает нормально. Нет темы не участвуют. Подклассы PublisherBase не являются подклассами QObject.
Что может быть причиной segfaults?

1 Ответ

0 голосов
/ 15 декабря 2018

Первое: Segmentation fault - сложная проблема для разработчиков.Для эффективной обработки используйте обработчик ошибок .Это часть Python v.3.x, но вы можете установить его в Python v.2.x, используя pip .Но иногда лучше использовать фильтр событий Register - для виджета, для которого нужно отслеживать сигнальные события.Вот пример для мыши (просто чтобы посмотреть, как она выглядит):

# IT IS JUST AN EXAMPLE (NOT A SOLUTION)

def eventFilter(self, source, event):
    if event.type() == QEvent.MouseButtonPress:
        if source == self.txtEditor :
            pos=event.pos()
            cursor=self.txtEditor.cursorForPosition(pos)
            cursor.select(QTextCursor.WordUnderCursor)
            txtClicked=cursor.selectedText()
            self.testCommand(str(txtClicked))
    return QMainWindow.eventFilter(self, source, event)

Второй: вы можете использовать Модуль Python Debugger :

python -m pdb yourScript.py

Третье: для вовлеченных потоков (но вы сказали, что нет вовлеченных потоков).

shutdown (exit) can hang or segfault with daemon threads running
...