Как я могу печатать от 1 до 10 в плагине QGIS?(не сразу) - PullRequest
0 голосов
/ 12 сентября 2018
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 голосов
/ 12 сентября 2018

Никогда не используйте time.sleep() в главном потоке GUI, эта функция блокирует выполнение 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()
...