立即在datachanged上更新视图

时间:2017-09-23 14:09:21

标签: python pyqt signals

我有一个像Excel这样的单元格的表格。我知道我需要从我的模型中发出dataChanged信号才能更新我的视图,它完美无缺。但是,当更新来自另一个(python)线程时,我需要在更新的单元格上设置我的鼠标(单击一次),以便显示新值。我知道在模型中正确设置了 的新值(我可以看到日志),但View落后了..

如果更新与已经激活的单元格有关,则立即反映更新。

我应该发出什么信号才能在没有点击右侧单元格的情况下强制查看更新?

编辑现在可以使用了。我需要实现QThread而不是普通的pythhon线程,并将信号从数据模型连接到处理程序。解决

1 个答案:

答案 0 :(得分:0)

警告QObject::connect: Cannot queue arguments of type 'QVector<int>'阻止了dataChanged信号被捕获。发生这种情况是因为此信号是从另一个(pythonic)线程发出的。为了使它工作,我需要将QThead子类化为:

class MyThread(QThread):
    updated = QtCore.pyqtSignal(str)

    def run(self):
        while 1:
            result= do stuff...
            self.updated.emit(result)

在我的QAbstractTableModel中,将信号连接到我的模型:

class TableModel(QAbstractTableModel):
    def __init__(self, rowCount: int, colCount: int, parent=None):
        super(QAbstractTableModel, self).__init__(parent)
        self._listenerth = MyThread()
        self._listenerth.updated.connect(self.remote_update_handler)
        self._listenerth.start(QThread.LowPriority)

    def remote_update_handler(self,result):
        self.setData(QModelIndex,result, QtCore.Qt.EditRole)

这使警告消失了,更新工作完美无缺