You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQtGraph中如何创建指定中点的可拖拽调整线段?

在PyQtGraph中实现带同步中点的可拖拽线段ROI

直接基于pg.LineSegmentROI扩展,添加中点标记并实现同步更新,以下是完整解决方案:

自定义ROI类

继承原LineSegmentROI,新增中点标记并绑定更新逻辑:

import pyqtgraph as pg
from pyqtgraph.Qt import QtWidgets, QtCore

class LineSegmentMidPointROI(pg.LineSegmentROI):
    def __init__(self, pos, **kwargs):
        super().__init__(pos, **kwargs)
        # 创建红色圆点作为中点标记
        self.mid_point = pg.ScatterPlotItem(size=10, pen=pg.mkPen('r'), brush=pg.mkBrush('r'))
        # 线段变化时触发中点更新
        self.sigRegionChanged.connect(self.update_mid_point)

    def setParentItem(self, parent):
        super().setParentItem(parent)
        # 将中点标记添加到ViewBox中
        if parent is not None:
            parent.addItem(self.mid_point)
            self.update_mid_point()

    def update_mid_point(self):
        # 获取两个端点的全局坐标
        p1, p2 = self.getGlobalHandlePositions()
        # 计算中点坐标
        mid_pos = ((p1.x() + p2.x())/2, (p1.y() + p2.y())/2)
        # 更新中点位置
        self.mid_point.setData(pos=[mid_pos])

    def updateHandles(self):
        super().updateHandles()
        # 端点位置更新时同步更新中点
        self.update_mid_point()

使用示例

创建包含该ROI的可视化窗口,测试拖拽、缩放功能:

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    win = pg.GraphicsLayoutWidget(show=True, title="带中点的线段ROI")
    view = win.addViewBox()
    view.setAspectLocked(True)

    # 初始化线段,端点为(0,0)和(10,10)
    line_roi = LineSegmentMidPointROI([[0, 0], [10, 10]], pen=pg.mkPen('b', width=2))
    view.addItem(line_roi)

    # 添加坐标轴
    ax = pg.AxisItem(orientation='bottom')
    ay = pg.AxisItem(orientation='left')
    win.addItem(ax, row=1, col=0)
    win.addItem(ay, row=0, col=1)
    view.setXLink(ax)
    view.setYLink(ay)
    ax.setLabel('X轴')
    ay.setLabel('Y轴')

    app.exec_()

关键逻辑说明

  • 保留LineSegmentROI原有所有交互功能(拖拽端点调整长度、整体拖拽移动线段)
  • 通过sigRegionChanged信号和重写updateHandles方法,覆盖所有线段变化场景,确保中点实时同步更新
  • 中点标记使用ScatterPlotItem,可根据需求调整颜色、大小等样式

内容的提问来源于stack exchange,提问作者patoghfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:22:32