使用Python在qgis中计划重复事件

使用Python在qgis中计划重复事件,python,schedule,qgis,Python,Schedule,Qgis,我必须在qgis中每n秒安排一次作业。在此期间,我将能够做其他事情,例如可视化对象的属性。 我在Python中实现了如下代码: import time,threading... interval=60 def job(): .... .... .... threading.Timer(interval,job).start() threading.Timer(interval,job).start() 当我启动脚本时,它将保持挂起状态,不执行任何操作 为了完整起见,

我必须在qgis中每n秒安排一次作业。在此期间,我将能够做其他事情,例如可视化对象的属性。 我在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线程中进行处理

从PyQt4.QtCore导入QTimer 定时器=QTimer timer.timeout.connectmy_插槽 timer.start1000启动 看一看