如何在QGIS插件中从1到10打印? (不是一次)

问题描述 投票:0回答:1
for i in range(1, 10):
    QgsMessageLog.logMessage(str(i), tag="Validating", level=QgsMessageLog.INFO)
    time.sleep(1)

QGIS将等待插件完成。 (123456789)

完成工作后给我带来了结果。

所以我无法在QGIS上看到一步一步的记录。 (1 ... 2 ... 3 ... 4 ...... 9)

我希望每次执行时都会打印出来。

我怎样才能做到这一点?

python logging pyqt qgis
1个回答
0
投票

永远不要在GUI的主线程中使用time.sleep(),该函数会阻止GUI的执行,因此您可以获得该行为,在您的特定情况下,您可以使用QTimeLine

def onframeChanged(val):
    msg = str(val)
    QgsMessageLog.logMessage(msg, tag="Validating", level=QgsMessageLog.INFO)

n = 9
self.timeline = QtCore.QTimeLine(n*1000)
self.timeline.setFrameRange(0, n)
self.timeline.frameChanged.connect(onframeChanged)
self.timeline.finished.connect(self.timeline.deleteLater)
self.timeline.start()

如果您希望定期运行任务,可以使用QTimer

def onTimeout():
    msg = QtCore.QDateTime.currentDateTime().toString()
    QgsMessageLog.logMessage(msg, tag="Validating", level=QgsMessageLog.INFO)

self.timer = QtCore.QTimer(interval=1000)
self.timer.timeout.connect(onTimeout)

self.timer.start()
© www.soinside.com 2019 - 2024. All rights reserved.