QObject实例化的PySide分段错误

时间:2018-11-16 06:32:28

标签: python python-3.x segmentation-fault pyside

我有一个类,该类是我其他非qt类的基础。此类使用Signal实例实例化QObject类。不幸的是,有时会引发分段错误错误。这是我的代码:

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的子类。
造成段错误的原因是什么?

1 个答案:

答案 0 :(得分:4)

首先:Segmentation fault对于开发人员来说是一个复杂的问题。要有效处理它,请使用fault handler。它是Python v.3.x的一部分,但是您可以使用 pip 将其安装在Python v.2.x中。但有时您最好使用事件过滤器注册-为一个小部件跟踪其信号事件。这是鼠标的示例(只是看它的外观):

# 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)

第二:您可以使用The Python Debugger模块:

python -m pdb yourScript.py

第三:对于所涉及的线程(但是您说不涉及任何线程)。

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