Quellcode durchsuchen

GridViewer - select cells ok

olinox vor 9 Jahren
Ursprung
Commit
7071988174
4 geänderte Dateien mit 115 neuen und 23 gelöschten Zeilen
  1. 27 17
      tests/gridviewer/GridViewer.py
  2. 49 0
      tests/gridviewer/GridViewerCell.py
  3. 14 5
      tests/gridviewer/main.py
  4. 25 1
      tests/gridviewer/main.ui

+ 27 - 17
tests/gridviewer/GridViewer.py

@@ -9,24 +9,22 @@ if __name__ == "__main__":
     pypog_path = (os.path.abspath("..\\..\\"))
     sys.path.append(pypog_path)
 
-from PyQt5.QtCore import QPointF
-from PyQt5.QtGui import QPolygonF
-from PyQt5.QtWidgets import QMainWindow, QGraphicsPolygonItem, QGraphicsItem, \
-    QApplication, QGraphicsScene
+from PyQt5.QtCore import QPointF, Qt
+from PyQt5.QtWidgets import QMainWindow, \
+    QApplication, QGraphicsScene, QGraphicsView
 
 from core import geometry
-from core.graphic.cells import polygon
+from tests.gridviewer.GridViewerCell import GridViewerCell
 from tests.gridviewer.main import Ui_window
 
 
-# from PyQt5.Qt import QMainWindow, QApplication, QPolygonF, QGraphicsPolygonItem, \
-#     QGraphicsItem, QPointF
 class GridViewer(QMainWindow):
 
     def __init__(self):
         super (GridViewer, self).__init__()
         
         self._polygons = {}
+        self.selection = []
         self.createWidgets()
         
     def createWidgets(self):
@@ -37,9 +35,11 @@ class GridViewer(QMainWindow):
         self.ui.view.setScene(self._scene)
         self.ui.view.scale(0.25, 0.25)
         self.ui.view.centerOn(QPointF(0,0))
-        self.ui.view.setDragMode(1)
+        self.ui.view.setDragMode(QGraphicsView.NoDrag)
         
         self.ui.btn_make.clicked.connect(self.make_grid)
+        
+        self.ui.txt_coords.textChanged.connect(self.update_selected_cells)
 
         
     def make_grid(self):
@@ -58,17 +58,27 @@ class GridViewer(QMainWindow):
         
         for x in range(width):
             for y in range(height):
-                points = [QPointF(xp, yp) for xp, yp in polygon(shape, x, y)]
-                
-                qpolygon = QPolygonF( points )
-                
-                graphic_polygon = QGraphicsPolygonItem(qpolygon)
                 
-                self._scene.addItem(graphic_polygon)
+                cell = GridViewerCell(self, x, y)
+                cell.generate(shape)
                 
-                graphic_polygon.setFlag(QGraphicsItem.ItemIsFocusable)
-                
-                self._polygons[(x, y)] = graphic_polygon
+                self._scene.addItem(cell)   
+                             
+                self._polygons[(x, y)] = cell
+
+
+    def add_to_selection(self, x, y):
+        self.selection.append( (x, y) )
+    
+        self.ui.txt_coords.setText( str(self.selection) )
+    
+    def remove_from_selection(self, x, y):
+        self.selection.remove( (x, y) )
+        
+        self.ui.txt_coords.setText( str(self.selection) )
+        
+    def update_selected_cells(self):
+        pass
 
 
 if __name__ == "__main__":

+ 49 - 0
tests/gridviewer/GridViewerCell.py

@@ -0,0 +1,49 @@
+'''
+Created on 26 nov. 2016
+
+@author: olinox
+'''
+from PyQt5.QtCore import QPointF, pyqtSignal, QObject
+from PyQt5.QtGui import QPolygonF, QPen, QBrush, QColor
+from PyQt5.QtWidgets import QGraphicsPolygonItem, QGraphicsItem
+
+from core.graphic.cells import polygon
+
+
+class GridViewerCell(QGraphicsPolygonItem):
+    
+    def __init__(self, gridViewer, x, y):
+        super(GridViewerCell, self).__init__()
+        self.gridViewer = gridViewer
+        self.x = x
+        self.y = y
+        self.selected = False
+        
+    def generate(self, shape):
+        
+        points = [QPointF(xp, yp) for xp, yp in polygon(shape, self.x, self.y)]
+        
+        qpolygon = QPolygonF( points )
+        
+        self.setPolygon(qpolygon)
+        
+        pen = QPen()
+        pen.setWidth(3)
+        self.setPen(pen)
+        
+        self.setFlag(QGraphicsItem.ItemIsFocusable)   
+        
+    def mousePressEvent(self, *args, **kwargs):
+
+        if self.selected:
+            self.setBrush( QBrush(  ) )
+            self.selected = False
+            self.gridViewer.remove_from_selection(self.x, self.y)
+        else:
+            self.setBrush( QBrush( QColor(200,0,0, 100) ) )
+            self.selected = True
+            self.gridViewer.add_to_selection(self.x, self.y)
+             
+#         return QGraphicsPolygonItem.mousePressEvent(self, *args, **kwargs)
+    
+    

+ 14 - 5
tests/gridviewer/main.py

@@ -18,8 +18,10 @@ class Ui_window(object):
         window.setFont(font)
         self.centralwidget = QtWidgets.QWidget(window)
         self.centralwidget.setObjectName("centralwidget")
-        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget)
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
+        self.horizontalLayout.setContentsMargins(3, 3, 3, 3)
+        self.horizontalLayout.setSpacing(3)
+        self.horizontalLayout.setObjectName("horizontalLayout")
         self.verticalLayout = QtWidgets.QVBoxLayout()
         self.verticalLayout.setSpacing(3)
         self.verticalLayout.setObjectName("verticalLayout")
@@ -48,7 +50,8 @@ class Ui_window(object):
         self.spb_width.setMinimumSize(QtCore.QSize(20, 28))
         self.spb_width.setMaximumSize(QtCore.QSize(80, 28))
         self.spb_width.setMinimum(1)
-        self.spb_width.setMaximum(9999)
+        self.spb_width.setMaximum(999)
+        self.spb_width.setProperty("value", 30)
         self.spb_width.setObjectName("spb_width")
         self.horizontalLayout_2.addWidget(self.spb_width)
         self.label_2 = QtWidgets.QLabel(self.centralwidget)
@@ -60,7 +63,8 @@ class Ui_window(object):
         self.spb_height.setMinimumSize(QtCore.QSize(20, 28))
         self.spb_height.setMaximumSize(QtCore.QSize(80, 28))
         self.spb_height.setMinimum(1)
-        self.spb_height.setMaximum(9999)
+        self.spb_height.setMaximum(999)
+        self.spb_height.setProperty("value", 30)
         self.spb_height.setObjectName("spb_height")
         self.horizontalLayout_2.addWidget(self.spb_height)
         self.btn_make = QtWidgets.QToolButton(self.centralwidget)
@@ -68,7 +72,12 @@ class Ui_window(object):
         self.btn_make.setObjectName("btn_make")
         self.horizontalLayout_2.addWidget(self.btn_make)
         self.verticalLayout.addLayout(self.horizontalLayout_2)
-        self.verticalLayout_2.addLayout(self.verticalLayout)
+        self.horizontalLayout.addLayout(self.verticalLayout)
+        self.txt_coords = QtWidgets.QTextEdit(self.centralwidget)
+        self.txt_coords.setObjectName("txt_coords")
+        self.horizontalLayout.addWidget(self.txt_coords)
+        self.horizontalLayout.setStretch(0, 2)
+        self.horizontalLayout.setStretch(1, 1)
         window.setCentralWidget(self.centralwidget)
         self.menubar = QtWidgets.QMenuBar(window)
         self.menubar.setGeometry(QtCore.QRect(0, 0, 791, 19))

+ 25 - 1
tests/gridviewer/main.ui

@@ -20,7 +20,22 @@
    <string>MainWindow</string>
   </property>
   <widget class="QWidget" name="centralwidget">
-   <layout class="QVBoxLayout" name="verticalLayout_2">
+   <layout class="QHBoxLayout" name="horizontalLayout" stretch="2,1">
+    <property name="spacing">
+     <number>3</number>
+    </property>
+    <property name="leftMargin">
+     <number>3</number>
+    </property>
+    <property name="topMargin">
+     <number>3</number>
+    </property>
+    <property name="rightMargin">
+     <number>3</number>
+    </property>
+    <property name="bottomMargin">
+     <number>3</number>
+    </property>
     <item>
      <layout class="QVBoxLayout" name="verticalLayout">
       <property name="spacing">
@@ -111,6 +126,9 @@
           <property name="maximum">
            <number>999</number>
           </property>
+          <property name="value">
+           <number>30</number>
+          </property>
          </widget>
         </item>
         <item>
@@ -152,6 +170,9 @@
           <property name="maximum">
            <number>999</number>
           </property>
+          <property name="value">
+           <number>30</number>
+          </property>
          </widget>
         </item>
         <item>
@@ -171,6 +192,9 @@
       </item>
      </layout>
     </item>
+    <item>
+     <widget class="QTextEdit" name="txt_coords"/>
+    </item>
    </layout>
   </widget>
   <widget class="QMenuBar" name="menubar">