Страница 1 из 1
Автообновление
Добавлено: 09 окт 2017, 11:18
BPV217
Не могу найти настройки автообновления карты.
В идеале обновление одного слоя.
Нужно что бы без каких либо манипуляций с картой обновлялся слой.
QGis 2.18.13
Re: Автообновление
Добавлено: 09 окт 2017, 15:08
Эдуард Казаков
В консоли
Код: Выделить всё
layer.dataProvider().forceReload()
layer.triggerRepaint()
где в layer ваш объект QGSVectorLayer. Будет перерисовываться только он.
Можно обернуть в таймер, чтобы само запускалось каждые n времени. Можно наверное плагин заделать, который будет управлять этим. Штатного решения вроде бы нет.
Re: Автообновление
Добавлено: 10 окт 2017, 15:55
BPV217
Такой запрос в питоне, но обновляет всю карту.
Код: Выделить всё
import PyQt4
from PyQt4 import QtCore
def timer_action():
layer = iface.activeLayer()
layer.dataProvider().forceReload()
layer.triggerRepaint()
timer = QtCore.QTimer()
QtCore.QObject.connect(timer, QtCore.SIGNAL('timeout()'), timer_action)
timer.start(10000)
Что не так, почему он не конкретный слой проверяет?
Как задать эту функцию для конкретного слоя, а не для всей карты и без использования iface.activeLayer(),
Я пробовал заменять layer на u'\u041f\u0426' (как я понял это и есть название моего слоя на питоне)
Но не помогло.
Тоже не заработало.
И в конечном итоге, какие варианты есть рационального запуска всего этого со стороны пользователя, в конечном итоге нужно либо кнопку создать, либо в QGis на автовыполнение поставить. Какие у меня варианты создать что-либо?
Re: Автообновление
Добавлено: 16 окт 2017, 11:54
BPV217
Рабочий вариант:
Код: Выделить всё
import time,threading
interval=6 #Интервал в секундах
def job():
name = u'\u0411\u043e\u043b\u043e\u0442\u0430'
layer = QgsMapLayerRegistry.instance().mapLayersByName(name)[0]
layer.triggerRepaint()
threading.Timer(interval,job).start()
threading.Timer(interval,job).start()
Узнать название слоя
Код: Выделить всё
layer = iface.activeLayer() #layer = активный слой
layer.name() #Имя объекта layer
Re: Автообновление
Добавлено: 16 окт 2017, 14:32
BPV217
Как теперь это всё поставить на автозапуск, чтоб при запуске QGis включался скрипт?
Re: Автообновление
Добавлено: 31 окт 2017, 10:36
BPV217
Вопрос решили так:
в папке ...\.qgis2\python создали файл startup.py
Код: Выделить всё
from PyQt4 import QtGui, QtCore
from qgis._core import *
def tick():
layerList = [u'SensorData']
for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
if lyr.name() in layerList:
if lyr != None: lyr.triggerRepaint()
interval=10
timer = QtCore.QTimer()
timer.timeout.connect(tick)
timer.start(interval * 1000)
def job():
layer=None
print 'non'
print layer
for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
if lyr.name() == u'\u0417\u0434\u0430\u043d\u0438\u044f':
layer = lyr
break
print layer.name()
if layer != None: layer.triggerRepaint()
print layer
Всё работает, слой SensorData обновляется раз в 10 сек.
Re: Автообновление
Добавлено: 20 ноя 2017, 08:43
BPV217
Я могу средствами QGis сделать звуковое оповещение при изменении параметров у символа?
Взять какое-либо значение за норму, а в случае отклонения от неё сделать звуковое оповещение, а так же при возвращении в норму, другое оповещение.
Re: Автообновление
Добавлено: 04 июл 2018, 09:20
BPV217
Никто не делал автообновление экрана в версии 3.0+
С версией 2.18 мы разобрались, но нам нужно всё тоже самое повторить в версии 3.0+, желательно в 3.2, что-бы уже раз и навсегда уйти от 2.18
Мб. startup.py надо переделать или положить в другое место, мб новые решения появились
Подскажите в какую сторону копать