当前位置: 首页 > 知识库问答 >
问题:

PyQgis更新画布冻结层应用程序

淳于慎之
2023-03-14

我试图更新层的QgsProject实例与计时器在一个新的线程,并显示更新的数据在QMain Window.但是无论我如何改变属性/特性/层,它总是冻结应用程序。我知道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()

共有1个答案

汪博达
2023-03-14

事实证明,当您使用dataProvider的Change eAtiniteVales方法时,它不会冻结,尽管该方法的语法略有不同。

 类似资料:
  • 对于我的图像处理算法,我使用的是python/OpenCV。我的算法的输出将在同一个窗口中一遍又一遍地更新。

  • 当我运行任何JavaFX代码(甚至是hello world http://docs.oracle.com/JavaFX/2/get_started/hello_world.htm)并按下capslock键时,应用程序将冻结,直到关闭caps lock为止。 我在Kubuntu12.04中运行JavaFX,可能是Kubuntu的bug,我没有机会在另一个操作系统上尝试。 知道吗?

  • 有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。 Updating Applications There are several ways to update an Electron application. The easiest and officially supported one is

  • 有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。 使用 update.electronjs.org Electron 团队维护 update.electronjs.org,一个免费开源的网络服务,可以让 Electron 应用使用自动更新。 这个服务是设计给那些满足以下标准的 Electron 应

  • 问题内容: 问题 :定期更新GUI字段时,SWT冻结。 我想有一个带有文本字段的基于SWT的GUI,其值会定期增加。 最初,我从单独的线程访问textField导致抛出异常: 线程“ Thread-0”中的异常org.eclipse.swt.SWTException:在org.eclipse.swt.SWT.error(SWT.java)的org.eclipse.swt.SWT.error(SWT

  • 问题内容: 在我的应用程序中,我正在使用Intentservice从服务器获取数据,并将获取的数据存储到本地sqlite db中。我正在使用5 IntentService来获取并填充五个表。每个意向服务的数据最多可包含300行。我该怎么办? IntentService代码: 调用intentservice的代码: 并在完成任务时向我发送代码 在onReceiveResult ..中,结果代码通过调