Python PyQt-QThread中proxymodel的集合模型

Python PyQt-QThread中proxymodel的集合模型,python,qt,pyqt,qthread,Python,Qt,Pyqt,Qthread,在我的项目中,我注意到主对话框在设置某个ProxyModel的模型时冻结,因此我决定为此任务创建一个新线程以提供窗口的响应性,但现在它不断弹出一个错误,即: TypeError:QTableView.setModel(QAbstractItemModel):参数1具有意外的类型“tuple” 我不知道为什么… 这是我的密码: 这是用于使用我提供的参数更新proxyModel的QThread class ThreadedProxyModel(QThread): def __init__(s

在我的项目中,我注意到主对话框在设置某个ProxyModel的模型时冻结,因此我决定为此任务创建一个新线程以提供窗口的响应性,但现在它不断弹出一个错误,即:
TypeError:QTableView.setModel(QAbstractItemModel):参数1具有意外的类型“tuple”

我不知道为什么…
这是我的密码:

这是用于使用我提供的参数更新proxyModel的QThread

class ThreadedProxyModel(QThread):
    def __init__(self, contacts, contactsProxyModel, groups, groupsProxyModel,
                 chatSession, chatSessionProxyModel, msgs, msgsProxyModel):
        QThread.__init__(self)
        self.contacts = contacts
        self.contactsProxyModel = contactsProxyModel
        self.groups = groups
        self.groupsProxyModel = groupsProxyModel
        self.chatSession = chatSession
        self.chatSessionProxyModel = chatSessionProxyModel
        self.msgs = msgs
        self.msgsProxyModel = msgsProxyModel

    def run(self):
        self.contactsProxyModel.setSourceModel(recordsTableModel(self.contacts))
        self.contactsProxyModel.setFilterKeyColumn(-1)
        self.contactsProxyModel.setFilterCaseSensitivity(Qt.CaseInsensitive)

        self.groupsProxyModel.setSourceModel(recordsTableModel(self.groups))
        self.groupsProxyModel.setFilterKeyColumn(-1)
        self.groupsProxyModel.setFilterCaseSensitivity(Qt.CaseInsensitive)

        self.chatSessionProxyModel.setSourceModel(recordsTableModel(self.chatSession))
        self.chatSessionProxyModel.setFilterKeyColumn(-1)
        self.chatSessionProxyModel.setFilterCaseSensitivity(Qt.CaseInsensitive)

        self.msgsProxyModel.setSourceModel(recordsTableModel(self.msgs))
        self.msgsProxyModel.setFilterKeyColumn(-1)
        self.msgsProxyModel.setFilterCaseSensitivity(Qt.CaseInsensitive)

    def getContactsProxyModel(self):
        return self.contactsProxyModel,

    def getGroupsProxyModel(self):
        return self.groupsProxyModel

    def getChatSessionProxyModel(self):
        return self.chatSessionProxyModel

    def getMsgsProxyModel(self):
        return self.msgsProxyModel
这是在dialog类中调用setProxyModel线程的方法。请注意,所有数据(联系人、组、聊天会话…)都正常:

这是在对话框中的init方法中,我创建proxymodels并在线程中调用更新它们的方法,然后在各种QTableView中设置它们:

self.contactsProxyModel = QSortFilterProxyModel(self)
self.groupsProxyModel = QSortFilterProxyModel(self)
self.groupMembersProxyModel = QSortFilterProxyModel(self)
self.chatSessionProxyModel = QSortFilterProxyModel(self)
self.chatMsgsProxyModel = QSortFilterProxyModel(self)
self.msgsProxyModel = QSortFilterProxyModel(self)

self.setProxyModel()

self.contactsTableView.setModel(self.contactsProxyModel)
self.contactsTableView.resizeColumnsToContents()

self.groupsTableView.setModel(self.groupsProxyModel)
self.groupsTableView.resizeColumnsToContents()

self.chatSessionTableView.setModel(self.chatSessionProxyModel)
self.chatSessionTableView.resizeColumnsToContents()

self.chatSessionTableView.clicked.connect(self.setChatMsgsProxyModel)
self.chatMsgsTableView.resizeColumnsToContents()

self.groupsTableView.clicked.connect(self.setGroupMembersProxyModel)
self.groupMembersTableView.resizeColumnsToContents()

self.msgsTableView.setModel(self.msgsProxyModel)
self.msgsTableView.resizeColumnsToContents()

谢谢你的建议,我真的被卡住了…

不确定,但看起来

def getContactsProxyModel(self):
   return self.contactsProxyModel,

返回一个元组,尝试删除逗号。。。愚蠢的逗号。。。非常感谢你!但对话仍然冻结,有什么建议吗?在这一点上,一个想法是在QTableViews中设置模型来冻结它。。。我是否也应该将其移动到QThread?从多个线程访问Qt对象是非常危险的。QObject类是可重入的(模型子类是QObject,而不是QWidget),因此理论上我认为您可以在另一个线程中创建一个没有问题的模型,然后使用QObject.moveToThread()将其移动到主线程,然后再与视图连接。但是,我认为程序的缓慢部分是从模型中读取数据的视图,因此这对速度没有帮助。说实话,我不确定你能做些什么。Qt线程指南:
def getContactsProxyModel(self):
   return self.contactsProxyModel,