如何在不冻结应用程序的情况下更新视图?

时间:2019-07-17 10:40:01

标签: python multithreading pyqt5 qtableview

我每分钟(当我的模型正在更新时)都更新tableView,没有任何问题,也没有冻结。

但是现在由于特定的提取,我的更新功能比以前花费了更多的时间,所以当我更新视图时,它会冻结直到我的更新功能终止。

如何在另一个线程中启动更新,以避免冻结视图?

我试图在thread_update中启动计时器,但冻结仍然存在

class TicketGUI(QAbstractTableModel):
    def __init__(self, user_id, mdp, profile):
        QAbstractTableModel.__init__(self)
        self.EM = Extract(user_id, mdp) #Extract manager
        self.tickets = Tickets()
        self.tickets.load(self.EM, True) Load tickets from extract
        data = self.tickets.toDataframe()
        self._data = data

        # Update my table view each 60 seconds
        timer = QtCore.QTimer(self, timeout=self.on_timeout)
        thread_update = Thread(target=timer.start(60 * 1000))
        thread_update.start()

    def rowCount(self, parent=None):
        return self._data.shape[0]

    def columnCount(self, parent=None):
        return self._data.shape[1]

    def data(self, index, role=Qt.DisplayRole):
        [...]

    def headerData(self, col, orientation, role=Qt.DisplayRole):
        [...]

    def update(self, data):
        self.beginResetModel()
        self._data = data
        self.endResetModel()

    def on_timeout(self):
        self.tickets.load(self.EM)  #Load tickets from extract (THIS TAKES TIME)
        data = self.tickets.toDataframe()
        self.update(data)

0 个答案:

没有答案