如何更新我的视图而不冻结我的应用程序?

2024-03-28 16:39:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我每分钟都在更新我的tableView(当我的模型更新时),没有任何问题和冻结。你知道吗

但是现在我的更新函数要比以前花更多的时间,因为有特定的提取,所以当我更新视图时,它会冻结,直到我的更新函数终止。你知道吗

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

我试图在线程更新中启动计时器,但仍然冻结

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)

Tags: 函数self视图iddatainitdeftimeout