def draw_event(self): rnd = random.Random() if not self.isDrawn: item = QtWidgets.QGraphicsEllipseItem(*self.get_params()) self.graphicsScene.addItem(item) item = QtWidgets.QGraphicsEllipseItem(*self.get_params()) self.graphicsScene.addItem(item) item = QtWidgets.QGraphicsEllipseItem(*self.get_params()) item.setStartAngle(90) item.setSpanAngle(random.randrange(10, 100)) self.graphicsScene.addItem(item) item = QtWidgets.QGraphicsEllipseItem(*self.get_params()) item.setStartAngle(90 * 20) item.setSpanAngle(random.randrange(10, 100) * 20) self.graphicsScene.addItem(item) item = QtWidgets.QGraphicsRectItem(*self.get_params()) self.graphicsScene.addItem(item) item = QtWidgets.QGraphicsRectItem(*self.get_params()) self.graphicsScene.addItem(item) item = QtWidgets.QGraphicsLineItem() item.setLine( random.randrange( 0, self.graphicsView.frameGeometry().width() - MAX_WIDTH), random.randrange( 0, self.graphicsView.frameGeometry().height() - MAX_HEIGHT), random.randrange( 0, self.graphicsView.frameGeometry().width() - MAX_WIDTH), random.randrange( 0, self.graphicsView.frameGeometry().height() - MAX_HEIGHT)) self.graphicsScene.addItem(item) item = QtWidgets.QGraphicsLineItem() item.setLine( random.randrange( 0, self.graphicsView.frameGeometry().width() - MAX_WIDTH), random.randrange( 0, self.graphicsView.frameGeometry().height() - MAX_HEIGHT), random.randrange( 0, self.graphicsView.frameGeometry().width() - MAX_WIDTH), random.randrange( 0, self.graphicsView.frameGeometry().height() - MAX_HEIGHT)) self.graphicsScene.addItem(item) self.isDrawn = True
def add_node(self): x = random.randint(-200, 200) y = random.randint(-150, 150) node = QtWidgets.QGraphicsEllipseItem(x, y, 10, 10) node.setPen(self.node_pen) node.setBrush(self.node_brush) node.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable) node.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable) node.setCursor(Qt.PointingHandCursor) self.scene.addItem(node) self.maybe_save = True self.status_bar.showMessage(f"Added node at ({x}, {y})")
def create_possible_move_dots(self, from_coord): possible_coords = [ move[3:] for move in [move for move in self.allowed_moves if move[:2] == from_coord] ] self.possible_move_dots = [] for coord in possible_coords: position = self.square_at_coord[coord].boundingRect().center( ) - QtCore.QPointF(self.dot_size / 2, self.dot_size / 2) dot = QtWidgets.QGraphicsEllipseItem(position.x(), position.y(), self.dot_size, self.dot_size) dot.setBrush(QtGui.QBrush(QtCore.Qt.green)) dot.setZValue(self.possible_move_dot_Z_value) self.possible_move_dots.append(dot) self.scene().addItem(dot)
def __init__(self, view): super(PainterTool, self).__init__(view) self._prec_pos = None self._prec_size = None self.is_editing_size = False self._size = None self.size = 5 # preview item used when modifying size self.size_display_item = QtWidgets.QGraphicsEllipseItem() self.size_display_item.setPen(QtGui.QColor("red")) self.size_display_item.setZValue(99999) self.view.scene.addItem(self.size_display_item) self.update_cursor()
def setupScene(self): self.m_scene.setSceneRect(-300, -200, 600, 460) linearGrad = QtGui.QLinearGradient(QtCore.QPointF(-100, -100), QtCore.QPointF(100, 100)) linearGrad.setColorAt(0, QtGui.QColor(255, 255, 255)) linearGrad.setColorAt(1, QtGui.QColor(192, 192, 255)) self.setBackgroundBrush(linearGrad) radialGrad = QtGui.QRadialGradient(30, 30, 30) radialGrad.setColorAt(0, QtCore.Qt.yellow) radialGrad.setColorAt(0.2, QtCore.Qt.yellow) radialGrad.setColorAt(1, QtCore.Qt.transparent) pixmap = QtGui.QPixmap(60, 60) pixmap.fill(QtCore.Qt.transparent) painter = QtGui.QPainter(pixmap) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(radialGrad) painter.drawEllipse(0, 0, 60, 60) painter.end() self.m_lightSource = self.m_scene.addPixmap(pixmap) self.m_lightSource.setZValue(2) for i in range(-2, 3): for j in range(-2, 3): if (i + j) & 1: item = QtWidgets.QGraphicsEllipseItem(0, 0, 50, 50) else: item = QtWidgets.QGraphicsRectItem(0, 0, 50, 50) item.setPen(QtGui.QPen(QtCore.Qt.black, 1)) item.setBrush(QtGui.QBrush(QtCore.Qt.white)) effect = QtWidgets.QGraphicsDropShadowEffect(self) effect.setBlurRadius(8) item.setGraphicsEffect(effect) item.setZValue(1) item.setPos(i * 80, j * 80) self.m_scene.addItem(item) self.m_items.append(item)
painter.drawPath(myPath) def timerHandler(): increment = 15 blade1.setAngle(blade1.angle+increment) blade2.setAngle(blade2.angle+increment) blade3.setAngle(blade3.angle+increment) view.viewport().repaint() if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) scene = QtWidgets.QGraphicsScene(QtCore.QRectF(-100, -100, 200, 200)) scene.addItem(QtWidgets.QGraphicsRectItem(scene.sceneRect())) centerItem = QtWidgets.QGraphicsEllipseItem(QtCore.QRectF(-10, -10, 20, 20)) centerItem.setPen(QtGui.QPen(QtCore.Qt.darkBlue)) centerItem.setBrush(QtCore.Qt.green) centerItem.setZValue(2) scene.addItem(centerItem) circle1 = QtWidgets.QGraphicsEllipseItem(QtCore.QRectF(-75, -75, 150, 150)) circle1.setPen(QtGui.QPen(QtCore.Qt.black)) circle1.setBrush(QtCore.Qt.NoBrush) # scene.addItem(circle1) blade1 = FanBlade() scene.addItem(blade1) blade2 = FanBlade(120) scene.addItem(blade2)
def main(): app = QtWidgets.QApplication(sys.argv) margin = 10 scene = QtWidgets.QGraphicsScene(QtCore.QRectF(-200-margin/2, -200-margin/2, 400+margin, 400+margin)) rect = QtWidgets.QGraphicsRectItem(scene.sceneRect().adjusted(1, 1, -1, -1)) rect.setPen(QtGui.QPen(QtCore.Qt.red, 1)) # scene.addItem(rect) radius = 200 diameter = radius * 2 ellipseItem = QtWidgets.QGraphicsEllipseItem(QtCore.QRectF(-200, -200, diameter, diameter)) ellipseItem.setPen(QtGui.QPen(QtCore.Qt.darkBlue)) # ellipseItem.setBrush(QtCore.Qt.blue) scene.addItem(ellipseItem) origin = QtCore.QPointF(0, 0) p1 = None p2 = None angle = 270 line1 = None line2 = None conePath = QtGui.QPainterPath() def drawLine(): nonlocal p1 nonlocal angle nonlocal line1 nonlocal line2 nonlocal origin if p1 == None: angle2 = angle + 20 p1 = QtCore.QPointF(radius * math.cos(angle * math.pi / 180.0), radius * math.sin(angle * math.pi / 180.0)) p2 = QtCore.QPointF(radius * math.cos(angle2 * math.pi / 180.0), radius * math.sin(angle2 * math.pi / 180.0)) line1 = QtWidgets.QGraphicsLineItem(p1.x(), p1.y(), 0, 0) line2 = QtWidgets.QGraphicsLineItem(0, 0, p2.x(), p2.y()) # conePath.moveTo(line1) # conePath.lineTo(line2) # conePath.closeSubpath() # scene.addPath(conePath) scene.addItem(line1) scene.addItem(line2) else: scene.removeItem(line1) scene.removeItem(line2) # scene.removeItem(conePath) angle += 1 angle2 = angle + 20 p1 = QtCore.QPointF(radius * math.cos(angle * math.pi / 180.0), radius * math.sin(angle * math.pi / 180.0)) p2 = QtCore.QPointF(radius * math.cos(angle2 * math.pi / 180.0), radius * math.sin(angle2 * math.pi / 180.0)) line1 = QtWidgets.QGraphicsLineItem(p1.x(), p1.y(), 0, 0) line2 = QtWidgets.QGraphicsLineItem(0, 0, p2.x(), p2.y()) # conePath.moveTo(line1) # conePath.lineTo(line2) # conePath.closeSubpath() # scene.addPath(conePath) scene.addItem(line1) scene.addItem(line2) view = QtWidgets.QGraphicsView() view.setRenderHint(QtGui.QPainter.Antialiasing) view.setScene(scene) view.show() # drawLine() timer = QtCore.QTimer() timer.setInterval(100) timer.timeout.connect(drawLine) timer.start() sys.exit(app.exec_())