2014-11-03 39 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