2014-11-03 5 views
0

Мне нужно запланировать задание в qgis каждые n секунд. Тем временем я смогу сделать другие вещи (например, визуализировать атрибуты объекта). я реализовал код, как это в 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

Совершите прочтении посмотреть на [Run определенный код каждые п секунд] (http://stackoverflow.com/a/3393759/841339) –

ответ

0

Вместо этого попробуйте использовать QTimer. Вы можете подключить свой сигнал тайм-аута к слоту для выполнения вашей обработки (при необходимости, в потоке Python).

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

Спасибо lot..it работы! –