Pertanyaan PyQgis: Bagaimana cara mengubah atau mengatur layer aktif?


9

Mengembangkan plugin QGIS, saya menemukan bahwa jika tidak ada layer yang dipilih pada panel Layers saya dapat mengulangi semua layer dan melakukan apa saja pada mereka, tetapi "aktifkan".

Bisakah seseorang memberi saya petunjuk?

Jawaban:


18

Anda dapat mengatur lapisan aktif menggunakan objek qgis.utils.iface (yaitu QgisInterface ):

qgis.utils.iface.setActiveLayer(QgsMapLayer)  # returns bool
# or
qgis.utils.iface.legendInterface().setCurrentLayer(QgsMapLayer)  # returns bool

Menghapus pilihan, atau lapisan aktif (item QTreeWidget yang digarisbawahi dalam QGIS 2.0), dalam legenda sedikit lebih terlibat:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
lg = qgis.utils.iface.mainWindow().findChild(QTreeWidget, 'theMapLegend')
lg.selectionModel().clear()  # clear just selection
lg.setCurrentItem(None)  # clear selection and active layer

Ada tiga cara untuk mengambil lapisan saat ini, relatif terhadap apa yang mungkin ingin Anda lakukan:

~ via QList <QgsMapLayer *> QgsLegendInterface :: layers ()

qgis.utils.iface.legendInterface().layers()  # returns [layer, ...]

~ via QList <QgsMapLayer *> QgsMapCanvas :: layers () :

qgis.utils.iface.mapCanvas().layers()  # returns [layer, ...]

~ via const QMap <QString, QgsMapLayer *> & QgsMapLayerRegistry :: mapLayers () :

QgsMapLayerRegistry.instance().mapLayers()  # returns {'layer_id': layer, ...}

Referensi jawaban ini untuk informasi tentang perbedaan dalam koleksi layer tersebut.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.