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)
我希望每次执行时都会打印出来。
我怎样才能做到这一点?
永远不要在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()