| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- '''
- '''
- from PyQt5 import uic
- from PyQt5.Qt import Qt, QEvent, QGraphicsScene, QPointF, QFileDialog, \
- QApplication, QMessageBox, QTreeWidgetItem, \
- QGraphicsTextItem
- from PyQt5.QtWidgets import QMainWindow, QGraphicsView
- from path import Path
- import core
- Ui_window, _ = uic.loadUiType(Path(__file__).parent / 'qt_viewer.ui')
- class GraphicsObject(QGraphicsTextItem):
- def __init__(self, obj, parent=None, scene=None):
- self.obj = obj
- super(GraphicsObject, self).__init__("...", parent=parent)
- self.setHtml("<b>{}</b>".format(obj.nom))
- self.setTextWidth(200)
- class Viewer(QMainWindow):
- def __init__(self):
- super (Viewer, self).__init__()
- self.createWidgets()
- # ## UI related methods
- def createWidgets(self):
- self.ui = Ui_window()
- self.ui.setupUi(self)
- self.ui.progressBar.setVisible(False)
- self.ui.stackedWidget.setCurrentIndex(0)
- self.ui.btn_select.clicked.connect(self.run)
- self.ui.btn_zoom_plus.clicked.connect(self.zoom_plus)
- self.ui.btn_zoom_minus.clicked.connect(self.zoom_minus)
- self.ui.btn_zoom_view.clicked.connect(self.fit_in_view)
- self.ui.treeWidget.itemClicked.connect(self.itemSelected)
- core.Analyse.report = self.update_progression
- self.ui.view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
- self.ui.view.setDragMode(QGraphicsView.NoDrag)
- self.ui.view.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
- self.ui.view.viewport().installEventFilter(self)
- self._scene = QGraphicsScene()
- self._scene.setItemIndexMethod(QGraphicsScene.BspTreeIndex)
- self.ui.view.setScene(self._scene)
- self.ui.view.centerOn(QPointF(0, 0))
- self.fit_in_view()
- def eventFilter(self, obj, event):
- if event.type() == QEvent.Wheel:
- if event.angleDelta().y() > 0:
- self.zoom_plus()
- elif event.angleDelta().y() < 0:
- self.zoom_minus()
- return True
- return False
- def fit_in_view(self):
- self.ui.view.fitInView(self._scene.sceneRect(), Qt.KeepAspectRatio)
- def zoom_plus(self):
- self.ui.view.scale(1.2, 1.2)
- def zoom_minus(self):
- self.ui.view.scale(0.8, 0.8)
- def update_progression(self, i, total, msg=""):
- self.ui.progressBar.setMaximum(total)
- self.ui.progressBar.setValue(i)
- if msg:
- self.ui.txtPanel.append(msg)
- QApplication.processEvents()
- def run(self):
- # source_dir = QFileDialog.getExistingDirectory(self, "Sélectionner le répertoire des sources", "", QFileDialog.ShowDirsOnly)
- source_dir = r"C:\dev\access\AGRHum\source"
- self.ui.progressBar.setVisible(True)
- self.ui.lbl_repertoire.setText(source_dir)
- self.ui.txtPanel.clear()
- self.ui.treeWidget.clear()
- QApplication.setOverrideCursor(Qt.WaitCursor)
- core.Analyse.run(source_dir)
- QApplication.restoreOverrideCursor()
- QMessageBox.information(self, "test", "{} objets chargés".format(len(core.Analyse.objects)))
- self.ui.progressBar.setVisible(False)
- self.ui.stackedWidget.setCurrentIndex(1)
- self.ui.txtPanel.clear()
- topitem = QTreeWidgetItem()
- topitem.setText(0, "Objets")
- self.ui.treeWidget.addTopLevelItem(topitem)
- groupes = {}
- for index, obj in enumerate(core.Analyse.objects):
- if not obj.type_ in groupes:
- item = QTreeWidgetItem()
- item.setText(0, obj.type_)
- groupes[obj.type_] = item
- topitem.addChild(item)
- item = QTreeWidgetItem()
- item.setText(0, obj.nom)
- item.setData(1, 0, index)
- groupes[obj.type_].addChild(item)
- self.ui.treeWidget.setColumnHidden(1, True)
- self.ui.treeWidget.expandToDepth(1)
- def itemSelected(self, item):
- index = item.data(1, 0)
- obj = core.Analyse.objects[index]
- go = GraphicsObject(obj)
- self._scene.addItem(go)
|