因此,我编写了一个脚本,该脚本在一定时间间隔(使用time.sleep(5)每5秒一次)中使用“ while True:”一次又一次地执行我想要的操作。到目前为止,还不错,但是当我想要停止它时,我只是做不到。
我尝试了Control + C,Control + Break,Escape,但实际上它忽略了我的键盘。停止它的唯一方法是关闭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)
触发“退出”的条件是什么?
—
尼克,2015年
有很多方法可以在qgis中实现无阻塞过程。您无需离开Qt事件循环即可获得控件。我建议您探索:1)创建事件驱动的体系结构或2)以python子流程或简单方式管理您的流程)创建Processing Toolbox脚本,并在必要时与选择2集成
—
Luigi Pirelli
伙计们,也许我说错了。让我用一个新场景来重新说明这个问题:在QGIS中打开Python控制台,键入:而1:打印“ a”,然后按Enter。然后它将永远打印“ a”。在不退出QGIS的情况下如何停止它?这就是问题和真正的问题
—
Stelios M
这可能更像是一个通用的Python问题,所以您最好在StackOverflow上得到答案。
—
马丁
@马丁会的。但这是一个非常直截了当的问题,让我感到惊讶的是,QGIS主管开发人员还没有想到他们的python控制台中的无限循环方案。如果您在机器上以1:print'a'的方式执行时,是否可以使用键盘将其停止,或者这是我的系统故障?
—
Stelios M