Python PyQt5-使用QSortFilterProxyModel时退出代码3-->;filterAcceptsRow

Python PyQt5-使用QSortFilterProxyModel时退出代码3-->;filterAcceptsRow,python,pyqt,pyqt5,qabstractitemmodel,qsortfilterproxymodel,Python,Pyqt,Pyqt5,Qabstractitemmodel,Qsortfilterproxymodel,我试图在PyQt5(Python3.7-IDEPyCharm)中使用QSortFilterProxy模型。 我总是得到“进程结束,退出代码为3”,而没有其他事情发生。以下是我用于尝试的代码(在Stackoverflow中也可以找到): 从PyQt5.QtCore导入* 从PyQt5.QtWidgets导入* 导入系统 类模型(QAbstractTableModel): 定义初始化(self,parent=None,*args): QAbstractTableModel.\uuuuu init\u

我试图在PyQt5(Python3.7-IDEPyCharm)中使用QSortFilterProxy模型。 我总是得到“进程结束,退出代码为3”,而没有其他事情发生。以下是我用于尝试的代码(在Stackoverflow中也可以找到):

从PyQt5.QtCore导入*
从PyQt5.QtWidgets导入*
导入系统
类模型(QAbstractTableModel):
定义初始化(self,parent=None,*args):
QAbstractTableModel.\uuuuu init\uuuuu(self,parent,*args)
self.items=['Item_A_001'、'Item_A_002'、'Item_B_001'、'Item_B_002']
def行数(self,parent=QModelIndex()):
返回len(自我项目)
def columnCount(self,parent=QModelIndex()):
返回1
def数据(自身、索引、角色):
如果不是index.isValid():返回QVariant()
elif角色!=Qt.DisplayRole:
返回QVariant()
行=索引。行()

如果不再需要PyQt5
QVariant
中的行,则数据将直接转换为python的本机类型,因此
QVariant
方法
toPyObject()
不再存在,因此必须将模型和代理更改为以下内容:

class Model(QAbstractTableModel):
    def __init__(self, parent=None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.items = ['Item_A_001','Item_A_002','Item_B_001','Item_B_002']

    def rowCount(self, parent=QModelIndex()):
        return len(self.items)

    def columnCount(self, parent=QModelIndex()):
        return 1

    def data(self, index, role=Qt.DisplayRole):
        row = index.row()
        if 0 <= row < self.rowCount() and role == Qt.DisplayRole:
            return self.items[row]


class Proxy(QSortFilterProxyModel):
    def filterAcceptsRow(self, row, parent):
        return '_B_' in self.sourceModel().data(self.sourceModel().index(row, 0))
类模型(QAbstractTableModel):
定义初始化(self,parent=None,*args):
QAbstractTableModel.\uuuuu init\uuuuu(self,parent,*args)
self.items=['Item_A_001'、'Item_A_002'、'Item_B_001'、'Item_B_002']
def行数(self,parent=QModelIndex()):
返回len(自我项目)
def columnCount(self,parent=QModelIndex()):
返回1
def数据(self,index,role=Qt.DisplayRole):
行=索引。行()
如果0
class Model(QAbstractTableModel):
    def __init__(self, parent=None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.items = ['Item_A_001','Item_A_002','Item_B_001','Item_B_002']

    def rowCount(self, parent=QModelIndex()):
        return len(self.items)

    def columnCount(self, parent=QModelIndex()):
        return 1

    def data(self, index, role=Qt.DisplayRole):
        row = index.row()
        if 0 <= row < self.rowCount() and role == Qt.DisplayRole:
            return self.items[row]


class Proxy(QSortFilterProxyModel):
    def filterAcceptsRow(self, row, parent):
        return '_B_' in self.sourceModel().data(self.sourceModel().index(row, 0))