首页 > 解决方案 > QObject 实例化上的 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
段错误的原因可能是什么?

标签: pythonpython-3.xsegmentation-faultpyside

解决方案


第一:Segmentation fault对于开发者来说是一个复杂的问题。为了有效地处理它,请使用故障处理程序。它是 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)

第二:您可能会使用Python 调试器模块:

python -m pdb yourScript.py

第三:对于涉及的线程(但你说不涉及线程)。

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

推荐阅读