Показывать ползунок прозрачности по умолчанию в панели слоев QGIS?

13

Можно ли по умолчанию показывать ползунок прозрачности в окне «Слой», т.е. сразу после добавления нового слоя, вместо того, чтобы включать его для каждого слоя вручную через свойства слоя?

отметка
источник

Ответы:

11

Это было кратко упомянуто на QGIS - форуме разработчиков, где вам нужно использовать QgsMapLayer :: setCustomPropertylayer, чтобы включить встроенный виджет для вашего слоя. Затем мы можем добавить itemAddedсобытие, чтобы при добавлении слоя он автоматически отображался с виджетом прозрачности.

Таким образом, вы можете использовать что-то вроде следующего в консоли Python :

def transparency_slider():
    for layer in QgsMapLayerRegistry.instance().mapLayers().values():
        if layer.customProperty("embeddedWidgets/count") != 1 or layer.customProperty("embeddedWidgets/0/id") != u'transparency':
            layer.setCustomProperty("embeddedWidgets/count", 1)
            layer.setCustomProperty("embeddedWidgets/0/id", "transparency")         
        else:
            pass
        qgis.utils.iface.legendInterface().refreshLayerSymbology(layer)

# Connect "itemAdded" event to "transparency_slider" function
legend = qgis.utils.iface.legendInterface()
legend.itemAdded.connect(transparency_slider)

Протестировано на QGIS 2.18.3 для 64-битной Win7.


Пример:

Вставка кода в консоль Python и перед добавлением шейп-файлов:

Перед

Результат:

После

Джозеф
источник
Это круто! Как тогда отключить это, если вы хотите добавить следующие векторные слои без ползунка прозрачности?
Мартин Хьюги,
1
@ MartinHügi - Вы можете просто набрать legend.itemAdded.disconnect(transparency_slider)в консоли Python;)
Джозеф
@ MartinHügi - Добро пожаловать, рад, что это так =)
Джозеф
1
Отличный сценарий! Есть ли способ сохранить это даже при перезапуске QGIS или вам нужно выполнять скрипт при каждом перезапуске?
Буббат
@poellinf - Как описано в этом посте: есть ли способ запустить скрипт Python при открытии проекта QGIS? Вы можете создать либо скрипт startup.py (который запускается при каждом запуске QGIS), либо макрокоманду проекта (которая выполняется только для вашего проекта). Используя любой метод, вам нужно будет добавить import qgis; from qgis.core import QgsMapLayerRegistryв вашем сценарии :)
Иосиф
6

Существует плагин Raster Transparency, который, как следует из названия, откроет закрепляемую панель с ползунками для изменения прозрачности выбранного растрового слоя.

Перейдите в раздел Плагины> Управление и установка плагинов - найдите и установите, на ваших панелях инструментов появится новый связанный значок.

Мартин Хьюги
источник