在pyqt5和Canvas,实现可以拖拽矩形框,创建新的矩形

PyQt5Canvas 上实现拖拽矩形框并创建新的矩形,可以通过结合 QGraphicsViewQGraphicsScene 来管理图形项(比如矩形)。这个方法提供了非常强大的功能来处理图形的创建、拖拽、删除和交互。

步骤概览:

  1. 使用 QGraphicsScene 来存放矩形和其他图形元素。
  2. 使用 QGraphicsView 来显示图形内容。
  3. 处理拖拽和创建新矩形的逻辑。

示例代码

以下是一个简单的实现,在这个程序中,你可以通过点击和拖拽来创建新的矩形,并可以拖动已经创建的矩形。

import sys
from PyQt5.QtCore import Qt, QRectF, QPointF
from PyQt5.QtGui import QColor, QBrush
from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsItem, QVBoxLayout, QWidget

class RectItem(QGraphicsRectItem):
    def __init__(self, rect, parent=None):
        super().__init__(rect, parent)
        self.setBrush(QBrush(QColor(100, 100, 250)))  # 设置矩形填充颜色
        self.setFlag(QGraphicsItem.ItemIsMovable)  # 使矩形可以拖动

    def mousePressEvent(self, event):
        super().mousePressEvent(event)

class GraphicsScene(QGraphicsScene):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setSceneRect(-500, -500, 1000, 1000)  # 设置场景大小

        self.rects = []  # 用来存储创建的矩形

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            # 创建新矩形
            x = event.scenePos().x()
            y = event.scenePos().y()
            new_rect = QRectF(x - 50, y - 50, 100, 100)  # 创建一个大小为100x100的矩形
            rect_item = RectItem(new_rect)
            self.addItem(rect_item)  # 添加到场景中
            self.rects.append(rect_item)  # 记录矩形
        super().mousePressEvent(event)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("拖拽矩形框")
        self.setGeometry(100, 100, 800, 600)

        # 创建图形视图和场景
        self.scene = GraphicsScene(self)
        self.view = QGraphicsView(self.scene, self)

        # 布局设置
        layout = QVBoxLayout()
        layout.addWidget(self.view)
        self.setLayout(layout)

        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

解释

  1. RectItem 类:

    • 继承自 QGraphicsRectItem,用来表示矩形。
    • 设置 ItemIsMovable 标志,使得矩形可以通过拖动来移动。
    • mousePressEvent 事件用于处理鼠标点击事件(用来触发拖动等行为)。
  2. GraphicsScene 类:

    • 继承自 QGraphicsScene,管理所有的图形元素。
    • mousePressEvent 事件用于创建新的矩形框。当用户点击鼠标左键时,会在鼠标点击位置创建一个新的矩形。
  3. MainWindow 类:

    • 设置了一个 QGraphicsView 来显示图形场景。
    • GraphicsScene 设置为场景,并将其嵌入到窗口中。

功能:

  • 拖动:已经创建的矩形可以通过点击并拖动来移动。
  • 创建新矩形:每次点击时,都会在鼠标点击位置创建一个新的矩形。

扩展功能

你可以根据需要扩展此应用程序的功能,例如:

  • 删除矩形:可以通过右键菜单或点击矩形时按 Delete 键来删除选中的矩形。
  • 矩形属性编辑:通过右键菜单或属性框来编辑矩形的大小、颜色、边框等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值