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

如何向PyQtGraph的PlotItem添加可点击LabelItem并解决位置异常问题

pyqtgraph实现可点击绘图标签的解决方案

问题根源

直接调用PlotItem.addItem()添加的LabelItem默认会被放置在绘图数据区域的原点位置,没有绑定坐标轴标签的布局规则,因此出现位置错位。

解决方案

直接替换对应坐标轴自带的LabelItem为自定义的可点击类,可完全复用pyqtgraph原生的标签位置适配逻辑,无需手动调整坐标,窗口缩放时也会自动适配位置。

修正后代码

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import pyqtgraph as pg
import sys

class ClickableLabelItem(pg.LabelItem):
    def __init__(self, text='No Data', **kwargs):
        super(ClickableLabelItem, self).__init__(**kwargs)
        self.setText(text)

    def mousePressEvent(self, ev):
        # 此处可替换为唤起菜单的业务逻辑
        print(f'{self.text} 被点击了')
        super().mousePressEvent(ev)


class AbstractPlot(pg.GraphicsLayoutWidget):
    def __init__(self):
        super(AbstractPlot, self).__init__()
        self.pl = pg.PlotItem()
        self.addItem(self.pl)

        # 替换左侧坐标轴标签为可点击版本
        left_axis = self.pl.getAxis('left')
        left_axis.label = ClickableLabelItem(text='左侧标签', justify='right')
        left_axis.label.setRotation(-90) # 左侧标签默认竖排展示
        left_axis._updateLabel()

        # 替换底部坐标轴标签为可点击版本(按需添加)
        bottom_axis = self.pl.getAxis('bottom')
        bottom_axis.label = ClickableLabelItem(text='底部标签')
        bottom_axis._updateLabel()


if __name__ == "__main__":
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    app = QApplication([])
    win = QMainWindow()
    plot = AbstractPlot()
    win.setCentralWidget(plot)
    win.show()

    if (sys.flags.interactive != 1) or not hasattr(Qt, 'PYQT_VERSION'):
        QApplication.instance().exec_()

效果说明

运行后左侧、底部的标签位置和原生标签完全一致,点击对应标签即可触发自定义的点击逻辑,窗口缩放、坐标轴调整时标签位置会自动适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:24:04