如何在 QGIS Plugin 中打印 1 到 10? (不是马上)

How can I print from 1 to 10 in the QGIS Plugin? ( not at once )

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