Cara terbaik untuk membuat alat baru seperti alat Select Single Feature adalah dengan mewarisi dari QgsMapTool
kelas. Saat alat Anda aktif, yang dapat diatur menggunakan QgsMapCanvas::setMapTool
, sembarang keyboard atau klik yang didapat kanvas akan diteruskan ke alat kustom Anda.
Ini QgsMapTool
kelas dasar
class PointTool(QgsMapTool):
def __init__(self, canvas):
QgsMapTool.__init__(self, canvas)
self.canvas = canvas
def canvasPressEvent(self, event):
pass
def canvasMoveEvent(self, event):
x = event.pos().x()
y = event.pos().y()
point = self.canvas.getCoordinateTransform().toMapCoordinates(x, y)
def canvasReleaseEvent(self, event):
#Get the click
x = event.pos().x()
y = event.pos().y()
point = self.canvas.getCoordinateTransform().toMapCoordinates(x, y)
def activate(self):
pass
def deactivate(self):
pass
def isZoomTool(self):
return False
def isTransient(self):
return False
def isEditTool(self):
return True
Anda dapat melakukan apa yang Anda butuhkan canvasReleaseEvent
, dll
Untuk mengaktifkan alat ini, Anda cukup melakukan:
tool = PointTool(qgis.iface.mapCanvas())
qgis.iface.mapCanvas().setMapTool(tool)
class PointTool(QgsMapTool): NameError: name 'QgsMapTool' is not defined
. Ada ide?from qgis.gui import QgsMapTool
di bagian atasNone
. Saya akan menyimpan apa yang telah dipilih pengguna denganQgsMapCanvas.mapTool()
mengembalikannya setelah Anda selesai.Saya pikir Anda dapat melakukan ini dengan kombinasi menggunakan QGIS "canvasClicked" tetapi juga SIGNAL / SLOTS untuk menangani respons:
Tidak mencoba tetapi harus memberi Anda beberapa informasi lebih lanjut untuk mulai melihat. Ada tutorial di sini di mana seseorang menggunakan ini untuk membangun plugin yang sangat mendasar.
sumber
QgsMapToolEmitPoint
kelas bawaan yang akan memberi Anda awal dasar untuk sebuah alat. Cara yang baik untuk terhubung ke sinyal di PyQt adalah menggunakan sintaks iniself.clickTool.canvasClicked.connect(self.handleMouseDown)
Coba sesuatu seperti ini (ini untuk memilih titik):
sumber
self.clickTool.canvasClicked.connect(self.handleMouseDown)
sintaks untuk terhubung ke sinyal karena jauh lebih bersih.