123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- from qgis.PyQt.QtWidgets import QDialog, QVBoxLayout, QTabWidget, QTextEdit, QGraphicsView, QGraphicsScene
- from qgis.core import QgsProject, QgsMapLayer, QgsVectorLayer
- from qgis.gui import QgsMapCanvas, QgsAttributeTableView
- from qgis.utils import iface
- class CombinedDialog(QDialog):
- def __init__(self, layer, parent=iface.mainWindow()):
- super().__init__(parent)
- self.layer = layer
- # Set the dialog layout
- self.setWindowTitle('Layer Information')
- layout = QVBoxLayout(self)
- # Create a QTabWidget to hold the different panels
- self.tabs = QTabWidget(self)
- # Add Metadata Panel (using QgsVectorLayer methods to get metadata)
- metadata_panel = QTextEdit(self) # TextEdit for displaying metadata
- metadata_text = self.get_layer_metadata(self.layer)
- metadata_panel.setPlainText(metadata_text) # Set the metadata text content
- self.tabs.addTab(metadata_panel, 'Metadata')
- # Add Preview Panel (using QgsMapCanvas in a QGraphicsView)
- preview_widget = QGraphicsView(self)
- preview_scene = QGraphicsScene(self)
- preview_widget.setScene(preview_scene)
- # Set up the map canvas for previewing the layer
- map_canvas = QgsMapCanvas()
- map_canvas.setCanvasColor('white')
- map_canvas.setDestinationCrs(self.layer.crs()) # Set the CRS of the map canvas
- map_canvas.setExtent(self.layer.extent()) # Set the extent to match the layer's extent
- map_canvas.setLayers([self.layer]) # Set the layer to be previewed
- map_canvas.refresh() # Refresh the map canvas to show the layer
- # Add the map canvas to the preview scene
- preview_scene.addWidget(map_canvas)
- self.tabs.addTab(preview_widget, 'Preview')
- # Add Attribute Table Panel (using QgsAttributeTableView)
- attribute_table = QgsAttributeTableView()
- attribute_table.setLayer(self.layer)
- self.tabs.addTab(attribute_table, 'Attribute Table')
- # Add the QTabWidget to the layout
- layout.addWidget(self.tabs)
- # Set dialog size
- self.resize(800, 600)
- def get_layer_metadata(self, layer):
- """Return basic metadata information of the layer"""
- metadata = []
- # Get layer name
- metadata.append(f"Layer Name: {layer.name()}")
- # Get layer type
- metadata.append(f"Layer Type: {layer.type()}")
- # Get CRS (Coordinate Reference System)
- metadata.append(f"CRS: {layer.crs().authid()}")
- # Get feature count
- metadata.append(f"Feature Count: {layer.featureCount()}")
- # Get fields (attribute names)
- fields = ", ".join([field.name() for field in layer.fields()])
- metadata.append(f"Fields: {fields}")
- # Get extent
- metadata.append(f"Extent: {layer.extent().toString()}")
- return "\n".join(metadata)
- def showDialog(self):
- self.exec_()
- # Usage:
- # layer = iface.activeLayer() # Get the active layer
- layer = QgsVectorLayer(
- "dbname='real3d' host=localhost port=5432 user='postgres' password='postgres' sslmode=disable checkPrimaryKeyUnicity='1' table=\"vector\".\"ghdka\" (geom)",
- 'test', 'postgres')
- if layer:
- dialog = CombinedDialog(layer)
- dialog.showDialog()
- else:
- print("No layer selected")
|