CombinedDialog.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from qgis.PyQt.QtWidgets import QDialog, QVBoxLayout, QTabWidget, QTextEdit, QGraphicsView, QGraphicsScene
  2. from qgis.core import QgsProject, QgsMapLayer, QgsVectorLayer
  3. from qgis.gui import QgsMapCanvas, QgsAttributeTableView
  4. from qgis.utils import iface
  5. class CombinedDialog(QDialog):
  6. def __init__(self, layer, parent=iface.mainWindow()):
  7. super().__init__(parent)
  8. self.layer = layer
  9. # Set the dialog layout
  10. self.setWindowTitle('Layer Information')
  11. layout = QVBoxLayout(self)
  12. # Create a QTabWidget to hold the different panels
  13. self.tabs = QTabWidget(self)
  14. # Add Metadata Panel (using QgsVectorLayer methods to get metadata)
  15. metadata_panel = QTextEdit(self) # TextEdit for displaying metadata
  16. metadata_text = self.get_layer_metadata(self.layer)
  17. metadata_panel.setPlainText(metadata_text) # Set the metadata text content
  18. self.tabs.addTab(metadata_panel, 'Metadata')
  19. # Add Preview Panel (using QgsMapCanvas in a QGraphicsView)
  20. preview_widget = QGraphicsView(self)
  21. preview_scene = QGraphicsScene(self)
  22. preview_widget.setScene(preview_scene)
  23. # Set up the map canvas for previewing the layer
  24. map_canvas = QgsMapCanvas()
  25. map_canvas.setCanvasColor('white')
  26. map_canvas.setDestinationCrs(self.layer.crs()) # Set the CRS of the map canvas
  27. map_canvas.setExtent(self.layer.extent()) # Set the extent to match the layer's extent
  28. map_canvas.setLayers([self.layer]) # Set the layer to be previewed
  29. map_canvas.refresh() # Refresh the map canvas to show the layer
  30. # Add the map canvas to the preview scene
  31. preview_scene.addWidget(map_canvas)
  32. self.tabs.addTab(preview_widget, 'Preview')
  33. # Add Attribute Table Panel (using QgsAttributeTableView)
  34. attribute_table = QgsAttributeTableView()
  35. attribute_table.setLayer(self.layer)
  36. self.tabs.addTab(attribute_table, 'Attribute Table')
  37. # Add the QTabWidget to the layout
  38. layout.addWidget(self.tabs)
  39. # Set dialog size
  40. self.resize(800, 600)
  41. def get_layer_metadata(self, layer):
  42. """Return basic metadata information of the layer"""
  43. metadata = []
  44. # Get layer name
  45. metadata.append(f"Layer Name: {layer.name()}")
  46. # Get layer type
  47. metadata.append(f"Layer Type: {layer.type()}")
  48. # Get CRS (Coordinate Reference System)
  49. metadata.append(f"CRS: {layer.crs().authid()}")
  50. # Get feature count
  51. metadata.append(f"Feature Count: {layer.featureCount()}")
  52. # Get fields (attribute names)
  53. fields = ", ".join([field.name() for field in layer.fields()])
  54. metadata.append(f"Fields: {fields}")
  55. # Get extent
  56. metadata.append(f"Extent: {layer.extent().toString()}")
  57. return "\n".join(metadata)
  58. def showDialog(self):
  59. self.exec_()
  60. # Usage:
  61. # layer = iface.activeLayer() # Get the active layer
  62. layer = QgsVectorLayer(
  63. "dbname='real3d' host=localhost port=5432 user='postgres' password='postgres' sslmode=disable checkPrimaryKeyUnicity='1' table=\"vector\".\"ghdka\" (geom)",
  64. 'test', 'postgres')
  65. if layer:
  66. dialog = CombinedDialog(layer)
  67. dialog.showDialog()
  68. else:
  69. print("No layer selected")