簡體   English   中英

PyQt-在QThread中設置代理模型的模型

[英]PyQt - Set model of a proxymodel in QThread

在我的項目中,我注意到主對話框在設置某些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

這是在對話框類中調用setProxyModel線程的方法。 請注意,所有數據(聯系人,組,聊天會話...)都可以:

def setProxyModel(self):
    progress = QProgressDialog("Initializing UI ...", "Abort", 0, 0, self)
    progress.setWindowTitle("WhatsApp Browser ...")
    progress.setWindowModality(Qt.WindowModal)
    progress.setMinimumDuration(0)
    progress.setCancelButton(None)
    progress.show()

    queryTh = ThreadedProxyModel(self.contacts, self.contactsProxyModel, self.groups, self.groupsProxyModel,
                                 self.chatSession, self.chatSessionProxyModel, self.msgs, self.msgsProxyModel,)
    queryTh.start()
    while queryTh.isRunning():
        QApplication.processEvents()

    self.contactsProxyModel = queryTh.getContactsProxyModel()
    self.groupsProxyModel = queryTh.getGroupsProxyModel()
    self.chatSessionProxyModel = queryTh.getChatSessionProxyModel()
    self.msgsProxyModel = queryTh.getMsgsProxyModel()

    progress.close()  

這是在對話框的init方法中,我創建代理模型並在Thread中調用用於更新它們的方法,然后在各種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,

返回一個元組,嘗試刪除逗號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM