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

时间:2018-09-12 01:22:45

标签: python logging pyqt qgis

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)

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

我该怎么做?

1 个答案:

答案 0 :(得分: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()