Автообновление
-
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Автообновление
Не могу найти настройки автообновления карты.
В идеале обновление одного слоя.
Нужно что бы без каких либо манипуляций с картой обновлялся слой.
QGis 2.18.13
В идеале обновление одного слоя.
Нужно что бы без каких либо манипуляций с картой обновлялся слой.
QGis 2.18.13
- Эдуард Казаков
- Гуру
- Сообщения: 546
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Автообновление
В консоли
где в layer ваш объект QGSVectorLayer. Будет перерисовываться только он.
Можно обернуть в таймер, чтобы само запускалось каждые n времени. Можно наверное плагин заделать, который будет управлять этим. Штатного решения вроде бы нет.
Код: Выделить всё
layer.dataProvider().forceReload()
layer.triggerRepaint()
Можно обернуть в таймер, чтобы само запускалось каждые n времени. Можно наверное плагин заделать, который будет управлять этим. Штатного решения вроде бы нет.
-
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Re: Автообновление
Такой запрос в питоне, но обновляет всю карту.
Что не так, почему он не конкретный слой проверяет?
Как задать эту функцию для конкретного слоя, а не для всей карты и без использования iface.activeLayer(),
Я пробовал заменять layer на u'\u041f\u0426' (как я понял это и есть название моего слоя на питоне)
Но не помогло.
Тоже не заработало.
И в конечном итоге, какие варианты есть рационального запуска всего этого со стороны пользователя, в конечном итоге нужно либо кнопку создать, либо в QGis на автовыполнение поставить. Какие у меня варианты создать что-либо?
Код: Выделить всё
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' (как я понял это и есть название моего слоя на питоне)
Код: Выделить всё
layer = iface.activeLayer()
layer.name()
Код: Выделить всё
layer = u'\u041f\u0426'
И в конечном итоге, какие варианты есть рационального запуска всего этого со стороны пользователя, в конечном итоге нужно либо кнопку создать, либо в QGis на автовыполнение поставить. Какие у меня варианты создать что-либо?
-
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Re: Автообновление
Рабочий вариант:
Узнать название слоя
Код: Выделить всё
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
-
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Re: Автообновление
Как теперь это всё поставить на автозапуск, чтоб при запуске QGis включался скрипт?
-
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Re: Автообновление
Вопрос решили так:
в папке ...\.qgis2\python создали файл startup.py
Всё работает, слой SensorData обновляется раз в 10 сек.
в папке ...\.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
-
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Re: Автообновление
Я могу средствами QGis сделать звуковое оповещение при изменении параметров у символа?
Взять какое-либо значение за норму, а в случае отклонения от неё сделать звуковое оповещение, а так же при возвращении в норму, другое оповещение.
Взять какое-либо значение за норму, а в случае отклонения от неё сделать звуковое оповещение, а так же при возвращении в норму, другое оповещение.
-
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Re: Автообновление
Никто не делал автообновление экрана в версии 3.0+
С версией 2.18 мы разобрались, но нам нужно всё тоже самое повторить в версии 3.0+, желательно в 3.2, что-бы уже раз и навсегда уйти от 2.18
Мб. startup.py надо переделать или положить в другое место, мб новые решения появились
Подскажите в какую сторону копать
С версией 2.18 мы разобрались, но нам нужно всё тоже самое повторить в версии 3.0+, желательно в 3.2, что-бы уже раз и навсегда уйти от 2.18
Мб. startup.py надо переделать или положить в другое место, мб новые решения появились
Подскажите в какую сторону копать
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 23 гостя