QGIS 3.6 установить активный слой - PullRequest
0 голосов
/ 21 октября 2019

Я новый ученик для этого плагина вещь вещь. У меня есть проблема в назначении слоя в качестве активного слоя. Я пытаюсь использовать этот метод кода self.Iface, но в результате появляется ошибка «У объекта AttributeError:« Prototypev1Dialog »нет атрибута« iface »».

Для примера кодирования, приведенного ниже, появляется ошибка «NameError: name»'qgis' не определено "

import os

from PyQt5 import uic
from PyQt5 import QtWidgets
from qgis.core import *
from qgis.core import QgsProject

FORM_CLASS, _ = uic.loadUiType(os.path.join(
   os.path.dirname(__file__), 'Prototype_dialog_base.ui'))


class Prototypev1Dialog(QtWidgets.QDialog, FORM_CLASS):
  def __init__(self, parent=None):
    super(Prototypev1Dialog, self).__init__(parent)
    self.setupUi(self)

    self.pushButton.clicked.connect(self.openVector)
    self.pushButton_2.clicked.connect(self.SaveSelection)
    self.pushButton_3.clicked.connect(self.openSel)

 def openVector(self):
    dirlayer = QgsVectorLayer('C:/Users/PC/Desktop/Data Qgis/OSM/gis_osm_places_free_1.shp', 'test', 'ogr')
    QgsProject.instance().addMapLayer(dirlayer)

 def SaveSelection(self):
    #curlayer = qgis.utils.iface.activeLayer()
    curlayer = self.iface.activeLayer()
    _writer = QgsVectorFileWriter.writeAsVectorFormat(curlayer, 'C:/Users/PC/Desktop/Extract/testExtract.shp', "UTF-8",
                                                      curlayer.crs(), "ESRI Shapefile", onlySelected=True)

 def openSel(self):
    sellayer = QgsVectorLayer('C:/Users/PC/Desktop/Extract/testExtract.shp', 'extract', 'ogr')
    QgsProject.instance().addMapLayer(sellayer)
...