我正在尝试使用新线程中的计时器更新 QgsProject 实例的层,并在 QMainWindow 中显示更新的数据。但是,无论我更改属性/功能/图层,它总是冻结应用程序。我知道 QgisProject 存在于主线程中,所以甚至可以在不冻结应用程序的情况下更改图层吗?如果是怎么办?
下面的代码是我试图在一个额外的线程中做的事情。
self.project = QgsProject.instance()
layer = self.project.mapLayersByName(layerName)[0]
keyColIdx = layer.fields().indexOf(keyCol)
with edit(layer):
for feat in layer.getFeatures():
for colToEdit in colsToEdit:
colToEditIdx = layer.fields().indexOf(colToEdit)
try:
# get item from dataframe
value = newDf[newDf[keyCol] == str(feat.attributes()[keyColIdx])][colToEdit].item()
# change attribute
layer.changeAttributeValue(feat.id(), colToEditIdx, value)
except:
pass
canvas.refresh()