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


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()

最新更新