如何向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
相关产品推荐
相关产品推荐

