Viewer.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. '''
  2. '''
  3. from PyQt5 import uic
  4. from PyQt5.Qt import Qt, QEvent, QGraphicsScene, QPointF, QFileDialog, \
  5. QApplication, QMessageBox, QTreeWidgetItem, \
  6. QGraphicsTextItem
  7. from PyQt5.QtWidgets import QMainWindow, QGraphicsView
  8. from path import Path
  9. import core
  10. Ui_window, _ = uic.loadUiType(Path(__file__).parent / 'qt_viewer.ui')
  11. class GraphicsObject(QGraphicsTextItem):
  12. def __init__(self, obj, parent=None, scene=None):
  13. self.obj = obj
  14. super(GraphicsObject, self).__init__("...", parent=parent)
  15. self.setHtml("<b>{}</b>".format(obj.nom))
  16. self.setTextWidth(200)
  17. class Viewer(QMainWindow):
  18. def __init__(self):
  19. super (Viewer, self).__init__()
  20. self.createWidgets()
  21. # ## UI related methods
  22. def createWidgets(self):
  23. self.ui = Ui_window()
  24. self.ui.setupUi(self)
  25. self.ui.progressBar.setVisible(False)
  26. self.ui.stackedWidget.setCurrentIndex(0)
  27. self.ui.btn_select.clicked.connect(self.run)
  28. self.ui.btn_zoom_plus.clicked.connect(self.zoom_plus)
  29. self.ui.btn_zoom_minus.clicked.connect(self.zoom_minus)
  30. self.ui.btn_zoom_view.clicked.connect(self.fit_in_view)
  31. self.ui.treeWidget.itemClicked.connect(self.itemSelected)
  32. core.Analyse.report = self.update_progression
  33. self.ui.view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
  34. self.ui.view.setDragMode(QGraphicsView.NoDrag)
  35. self.ui.view.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
  36. self.ui.view.viewport().installEventFilter(self)
  37. self._scene = QGraphicsScene()
  38. self._scene.setItemIndexMethod(QGraphicsScene.BspTreeIndex)
  39. self.ui.view.setScene(self._scene)
  40. self.ui.view.centerOn(QPointF(0, 0))
  41. self.fit_in_view()
  42. def eventFilter(self, obj, event):
  43. if event.type() == QEvent.Wheel:
  44. if event.angleDelta().y() > 0:
  45. self.zoom_plus()
  46. elif event.angleDelta().y() < 0:
  47. self.zoom_minus()
  48. return True
  49. return False
  50. def fit_in_view(self):
  51. self.ui.view.fitInView(self._scene.sceneRect(), Qt.KeepAspectRatio)
  52. def zoom_plus(self):
  53. self.ui.view.scale(1.2, 1.2)
  54. def zoom_minus(self):
  55. self.ui.view.scale(0.8, 0.8)
  56. def update_progression(self, i, total, msg=""):
  57. self.ui.progressBar.setMaximum(total)
  58. self.ui.progressBar.setValue(i)
  59. if msg:
  60. self.ui.txtPanel.append(msg)
  61. QApplication.processEvents()
  62. def run(self):
  63. # source_dir = QFileDialog.getExistingDirectory(self, "Sélectionner le répertoire des sources", "", QFileDialog.ShowDirsOnly)
  64. source_dir = r"C:\dev\access\AGRHum\source"
  65. self.ui.progressBar.setVisible(True)
  66. self.ui.lbl_repertoire.setText(source_dir)
  67. self.ui.txtPanel.clear()
  68. self.ui.treeWidget.clear()
  69. QApplication.setOverrideCursor(Qt.WaitCursor)
  70. core.Analyse.run(source_dir)
  71. QApplication.restoreOverrideCursor()
  72. QMessageBox.information(self, "test", "{} objets chargés".format(len(core.Analyse.objects)))
  73. self.ui.progressBar.setVisible(False)
  74. self.ui.stackedWidget.setCurrentIndex(1)
  75. self.ui.txtPanel.clear()
  76. topitem = QTreeWidgetItem()
  77. topitem.setText(0, "Objets")
  78. self.ui.treeWidget.addTopLevelItem(topitem)
  79. groupes = {}
  80. for index, obj in enumerate(core.Analyse.objects):
  81. if not obj.type_ in groupes:
  82. item = QTreeWidgetItem()
  83. item.setText(0, obj.type_)
  84. groupes[obj.type_] = item
  85. topitem.addChild(item)
  86. item = QTreeWidgetItem()
  87. item.setText(0, obj.nom)
  88. item.setData(1, 0, index)
  89. groupes[obj.type_].addChild(item)
  90. self.ui.treeWidget.setColumnHidden(1, True)
  91. self.ui.treeWidget.expandToDepth(1)
  92. def itemSelected(self, item):
  93. index = item.data(1, 0)
  94. obj = core.Analyse.objects[index]
  95. go = GraphicsObject(obj)
  96. self._scene.addItem(go)