簡體   English   中英

使用Python在qgis中安排重復事件

[英]To schedule a repeating event in qgis using Python

我必須每n秒在qgis中安排一份工作。 同時,我將能夠做其他事情(例如可視化對象的屬性)。 我已經在Python中實現了這樣的代碼:

import time,threading...

interval=60
def job():
   ....
   ....
   ....
   threading.Timer(interval,job).start()
threading.Timer(interval,job).start() 

當我啟動腳本時,它將保持暫停狀態,並且不執行任何操作

為了完整起見,我將整個代碼放在這里:

import time,threading
import re,glob,os
from PyQt4.QtGui import QColor

interval=5
def job():
    lay=qgis.utils.iface.activeLayer()
    iterator=range(50)
    counter=0
    for i in iterator:
        if lay<>None and not(re.search("com",lay.name())):
           QgsMapLayerRegistry.instance().removeMapLayer(lay.id())
           lay=qgis.utils.iface.activeLayer()
    dir="/home_local/titan/projDir/data/titan/shapefiles/shapefile/"
    lista=os.listdir(dir)
    exp="shp"
    for file in lista: 
        if re.search(exp,file):
           counter=counter+1           
           lay=qgis.utils.iface.addVectorLayer(dir+file,file+str(counter),"ogr") 
           symbols = lay.rendererV2().symbols()
           symbol = symbols[0]
           if re.search("F30",file):
               symbol.setColor(QColor.fromRgb(50,50,250))
           else :
               symbol.setColor(QColor.fromRgb(150,200,200))
           qgis.utils.iface.mapCanvas().refresh() 
           qgis.utils.iface.legendInterface().refreshLayerSymbology(lay)
           lay.setLayerTransparency(30)
    threading.Timer(interval,job).start()
threading.Timer(interval,job).start()

注意 沒有線程的工作工作。

嘗試改用QTimer。 您可以將其超時信號連接到插槽以進行處理(必要時在Python線程中)。

from PyQt4.QtCore import QTimer
timer = QTimer()
timer.timeout.connect(my_slot)
timer.start(1000) # start 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM