首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在qgis插件中未阻塞的Execute方法

在qgis插件中未阻塞的Execute方法
EN

Stack Overflow用户
提问于 2021-04-05 00:26:40
回答 3查看 132关注 0票数 0

我正在开发一个QGIS插件,具有调用其他方法的各种类和方法的复杂插件。我的插件运行良好,但我希望在后台运行一些类方法(类似于JAVA中的作业),以避免GUI冻结。我的意思是,我有一个类,这个类有一个方法,这个方法我想在后台运行

我尝试过QThread、QTask、threading、QProcess等,但我没有找到我想要做的事情。

有什么办法能帮到我吗?一些插件可以和后台进程一起工作吗?一些插件的例子?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2021-04-08 17:34:38

如果我理解正确的话,您希望刷新UI以避免QGIS冻结。这是对我有效的方法:

代码语言:javascript
运行
复制
from PyQt5.QtWidgets import QApplication

QApplication.processEvents() 

这将刷新QGIS的UI。您可能需要多次调用它,例如,在for循环中的每次迭代之后。

票数 0
EN

Stack Overflow用户

发布于 2021-04-11 02:15:51

谢谢你的回答

我要做的是在后台运行一个方法,而不冻结QGIS GUI这是我的代码示例

代码语言:javascript
运行
复制
class Example:
  def __init__(self):
      code
      self.createBotton()

  def createButton(self):
      Here I create my button
      self.okbutton.clicked.connect(self.pressOkButton)

  def pressOkButton(self):
      here I call other methods
      self.methodA()
      self.methodB()

  def methodA(self):
      code
  def methodB(self):
      code

我的问题是-->我如何在后台运行'pressOkButton‘方法?当我执行此方法时,在完成方法之前,我不能与QGIS GUI交互

注意:考虑到它是属于我的插件的一个类,所以这个类在启动插件时被实例化

票数 0
EN

Stack Overflow用户

发布于 2021-05-04 21:57:48

我一直在使用QTask,以便在后台运行繁重的进程。我正在使用的有用资源如下:

您必须专门创建一个继承自QgsTask的新类,并在您的图形用户界面插件的run()方法中调用它。

在我的例子中,我所拥有的是:

代码语言:javascript
运行
复制
class MyPlugin:
"""QGIS Plugin Implementation.
    ... __init__ method, tr method, initGui method, ...
"""
    def run(self):
        """Run method that performs the work after clicking 'OK' in the Plugin GUI"""
        task = MyTask('UserFriendlyTaskName', **props)
        QgsApplication.taskManager().addTask( task )


class MyTask(QgsTask):
    def __init__(self, task_name, **props):
        QgsTask.__init__(self, desc)
        # do w/e with the props
    def run(self):
        # call your heavy processes

关于QGIS3中的UI渲染,请参见下面的.gif,没有冻结,当插件运行时,我仍然可以在地图上移动和编辑数据。

QGIS GUI Launch Background Process GIF

希望这个答案能及时找到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66943433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档