Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. Clear selection - no work
Forum Updated to NodeBB v4.3 + New Features

Clear selection - no work

Scheduled Pinned Locked Moved Unsolved Qt for Python
2 Posts 2 Posters 226 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    manueletes
    wrote on last edited by
    #1

    Hello, I have managed to make the circles change color when selecting them using 'QRubberBand', but when I try to clear the selection it does not work

    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    import sys
    class Boton(QGraphicsItem):
        def __init__(self,parent,size,X,Y,name):
            super(Boton,self).__init__()
            self.setFlag(QGraphicsItem.ItemIsSelectable, True)        
            self.parent=parent
            self.globalRec=QRectF(0,0,size,size)
            self.setPos(X,Y)
            self.parent._scene.addItem(self)
        def cambi(self,val):
            if val ==0:
                self.parent.select=0
            else:
                self.parent.select=1
        def paint(self,painter,option,widget):
            if self.parent.select==0:
                painter.setBrush(self.parent.brush2)
            if self.parent.select==1:
                painter.setBrush(self.parent.brush1)       
            painter.setPen(self.parent.pen)
            painter.drawEllipse(self.globalRec)
        def boundingRect(self):
            return self.globalRec
    class Viewer(QGraphicsView):
        rectChanged = pyqtSignal(QRect)
        def __init__(self, parent):
            super(Viewer, self).__init__(parent)
            self.select=0   
            self.misItems=None
            color2 = QColor(5,100,70)
            color3 = QColor(155,100,70)
            color1 = QColor(225,100,70)
            self.brush1=QBrush(color1)
            self.brush2=QBrush(color2)
            self.origin = QPoint()
            self.poi=QPoint()
            self.pen=QPen()        
            self.pen.setWidth(2)
            self.pen.setColor(color3)
            self.rubberBand = QRubberBand(QRubberBand.Rectangle, self)
            self.setMouseTracking(True)
            self.changeRubberBand = False
            self._scene = QGraphicsScene(self)
            self.setScene(self._scene)
            Boton(self,20,0,0,'btn1')
            Boton(self,20,0,80,'btn2')
            Boton(self,20,0,-80,'btn3')
    
        def mousePressEvent(self, event):
            if event.button() == Qt.LeftButton:
                self.origin = event.pos()
                self.rubberBand.setGeometry(QRect(self.origin, QSize()))
                self.rectChanged.emit(self.rubberBand.geometry())
                self.rubberBand.show()
                self.changeRubberBand = True
                return
            super(Viewer, self).mousePressEvent(event)
        def mouseMoveEvent(self, event):
            if self.changeRubberBand:
                self.rubberBand.setGeometry(
                    QRect(self.origin, event.pos()).normalized())
                self.rectChanged.emit(self.rubberBand.geometry())
            super(Viewer, self).mouseMoveEvent(event)
        def mouseReleaseEvent(self, event):
            if event.button() == Qt.LeftButton:
                self.changeRubberBand = False
                if self.rubberBand.isVisible():
                    self.rubberBand.hide()
                    rect = self.rubberBand.geometry()
                    rect_scene = self.mapToScene(rect).boundingRect()
                    selected = self.scene().items(rect_scene)
    #event SELECT items Buttons:
                    if selected:
                        self.misItems=selected
                        for item in selected:
                            item.cambi(1)               
                    else:
                        for item in self.misItems:
                            item.cambi(0)
            super(Viewer, self).mouseReleaseEvent(event)
    
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.viewer = Viewer(self)
            VBlayout = QVBoxLayout(self)
            VBlayout.addWidget(self.viewer)
            VBlayout.setContentsMargins(0,0,0,0)
            self.setFixedSize(400,400)
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(app.exec_())
    

    link text

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi and welcome to devnet,

      Can you explain why you are abusing "parent" as you do ?

      Also, what exactly are you trying to achieve ? It seems that the QGraphicsElipseItem would do what you need.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved