def _add_results(self, preselect: int = -1, row_number: int = 0): ''' adds results to the map canvas and to the result list of the dialog ''' provider = self.preview_layer.layer.dataProvider() for i, result in enumerate(self.results): feature = QgsFeature() coords = result['geometry']['coordinates'] geom = QgsGeometry.fromPointXY(QgsPointXY(coords[0], coords[1])) feature.setGeometry(geom) feature.setAttributes([ i + 1, result['properties']['text'], ]) provider.addFeature(feature) properties = result['properties'] radio = QRadioButton(properties['text']) preview = QLabel() preview.setMaximumWidth(20) preview.setMinimumWidth(20) self.results_contents.addWidget(preview, i + row_number, 0) self.results_contents.addWidget(radio, i + row_number, 1) if self.show_score: score = QLabel(f'Score {properties["score"]}') self.results_contents.addWidget(score, i + row_number, 2) img_path = os.path.join(ICON_PATH, f'marker_{i+1}.png') if os.path.exists(img_path): pixmap = QPixmap(img_path) preview.setPixmap( pixmap.scaled(preview.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) # results clicked in the dialog are highlighted on the map radio.toggled.connect( lambda c, i=i, f=feature: self._toggle_result(i, f)) if i == preselect: radio.setChecked(True) self.preview_layer.layer.commitChanges() extent = self.preview_layer.layer.extent() if not extent.isEmpty(): transform = QgsCoordinateTransform( self.preview_layer.layer.crs(), self.canvas.mapSettings().destinationCrs(), QgsProject.instance()) self.canvas.setExtent(transform.transform(extent)) self.canvas.zoomByFactor(1.5) self.canvas.refresh()