Автообновление
- 
				BPV217
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Автообновление
Не могу найти настройки автообновления карты. 
В идеале обновление одного слоя.
Нужно что бы без каких либо манипуляций с картой обновлялся слой.
QGis 2.18.13
			
			
									
						
										
						В идеале обновление одного слоя.
Нужно что бы без каких либо манипуляций с картой обновлялся слой.
QGis 2.18.13
- Эдуард Казаков
- Гуру
- Сообщения: 549
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 535
- Откуда: Planet Earth
- Контактная информация:
Re: Автообновление
В консоли
где в layer ваш объект QGSVectorLayer. Будет перерисовываться только он.
Можно обернуть в таймер, чтобы само запускалось каждые n времени. Можно наверное плагин заделать, который будет управлять этим. Штатного решения вроде бы нет.
			
			
									
						
										
						Код: Выделить всё
layer.dataProvider().forceReload()
layer.triggerRepaint()
Можно обернуть в таймер, чтобы само запускалось каждые n времени. Можно наверное плагин заделать, который будет управлять этим. Штатного решения вроде бы нет.
- 
				BPV217
- Участник
- Сообщения: 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 на автовыполнение поставить. Какие у меня варианты создать что-либо?
- 
				BPV217
- Участник
- Сообщения: 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- 
				BPV217
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Re: Автообновление
Как теперь это всё поставить на автозапуск, чтоб при запуске QGis включался скрипт?
			
			
									
						
										
						- 
				BPV217
- Участник
- Сообщения: 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
- 
				BPV217
- Участник
- Сообщения: 80
- Зарегистрирован: 13 фев 2017, 09:12
- Репутация: 1
Re: Автообновление
Я могу средствами QGis сделать звуковое оповещение при изменении параметров у символа?
Взять какое-либо значение за норму, а в случае отклонения от неё сделать звуковое оповещение, а так же при возвращении в норму, другое оповещение.
			
			
									
						
										
						Взять какое-либо значение за норму, а в случае отклонения от неё сделать звуковое оповещение, а так же при возвращении в норму, другое оповещение.
- 
				BPV217
- Участник
- Сообщения: 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 надо переделать или положить в другое место, мб новые решения появились
Подскажите в какую сторону копать
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей
