2014-11-03 38 views
0

我必须每隔n秒在qgis中安排一项作业。在此期间,我将能够做其他事情(例如,可视化对象的属性)。 我已经实现了这样的代码在Python:要在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() 

NB。没有线程的工作。

+0

看看[运行某些代码每n秒](http://stackoverflow.com/a/3393759/841339) – 2014-11-03 15:39:19

回答

0

尝试使用QTimer代替。您可以将其超时信号连接到一个插槽来进行处理(如果需要,可以在Python线程中进行处理)。

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

非常感谢..它的作品! – 2014-11-05 08:55:58