इसलिए मैंने एक स्क्रिप्ट लिखी, जो मुझे एक निश्चित समय अंतराल में "जबकि ट्रू:" का उपयोग करके बार-बार चाहिए (हर 5 सेकंड में time.sleep (5)) का उपयोग करके। अब तक बहुत अच्छा है, लेकिन जब मैं इसे रोकना चाहता हूं तो मैं नहीं कर सकता।
मैंने कंट्रोल + सी, कंट्रोल + ब्रेक, एस्केप की कोशिश की है और यह व्यावहारिक रूप से मेरे कीबोर्ड की उपेक्षा करता है। इसे रोकने का एकमात्र तरीका QGIS को बंद करना है। कोई विचार? इसके अलावा, जब स्क्रिप्ट time.sleep (5) QGIS तरह के लैग्स और 5 सेकंड के लिए फ्रीज हिट करती है और मैं उदाहरण के लिए, लेयर को पैन नहीं कर सकता, लेकिन मुझे लगता है कि यह सामान्य है।
यहाँ मेरी स्क्रिप्ट है:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from qgis.core import *
from qgis.utils import iface
import time
while True:
def change_color():
active_layer = iface.activeLayer()
pipeline=[]
txt=open('C:/users/stelios/desktop/project/Sensor.txt','r')
for line in txt.readlines():
pipeline.append(line.split())
print pipeline
pipeline2=[]
for label,color in pipeline:
if "0" in color:
pipeline2.append([label,"green"])
else:
pipeline2.append([label,"red"])
print pipeline2
elatomatikoi=""
categories=[]
for label,color in pipeline2:
if 'red' in color:
elatomatikoi=elatomatikoi + label+","
symbol = QgsSymbolV2.defaultSymbol(active_layer.geometryType())
symbol.setColor(QColor(color))
category = QgsRendererCategoryV2(int(label), symbol, label)
categories.append(category)
expression = 'id'
renderer = QgsCategorizedSymbolRendererV2(expression, categories)
active_layer.setRendererV2(renderer)
active_layer.setCacheImage(None)
iface.mapCanvas().refresh()
iface.legendInterface().refreshLayerSymbology(active_layer)
elatomatikoi= elatomatikoi[:-1]
for label,color in pipeline2:
if 'red' in color:
QMessageBox.critical(None,"Warning",("Leakage at pipe(s):%s\nCheck Pipeline status " %elatomatikoi))
break
txt.close()
change_color()
time.sleep(5)