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

如何修改pyqtgraph.ScaleBar的背景与边框颜色?

解决pyqtgraph.ScaleBar黑色边框+白色不透明背景问题

要实现黑色边框、白色不透明背景的ScaleBar,你可以通过子类化ScaleBar并重写paint方法来实现,直接在绘制刻度条前先绘制带边框的背景矩形,确保在图像上方完全可见。

修改后的完整代码如下:

import pyqtgraph as pg
from PyQt5.QtGui import QColor, QPen, QBrush

class CustomScaleBar(pg.ScaleBar):
    def paint(self, p, opt, widget=None):
        # 先绘制白色背景+黑色边框的矩形
        # 计算背景矩形范围:比刻度条区域稍大,避免文字被裁剪
        bar_rect = self.boundingRect()
        # 扩展矩形范围,给文字留出空间
        bg_rect = bar_rect.adjusted(-5, -5, 5, 5)
        # 设置白色不透明画刷
        p.setBrush(QBrush(QColor(255, 255, 255, 255)))
        # 设置黑色边框画笔
        p.setPen(QPen(QColor(0, 0, 0), 1))
        p.drawRect(bg_rect)
        
        # 恢复原有画笔,绘制刻度条和文字
        p.setPen(self.pen)
        super().paint(p, opt, widget)

app = pg.mkQApp()

plot = pg.PlotWidget()

# 使用自定义的ScaleBar
scale_bar = CustomScaleBar(size=1, width=5, offset=(-10, -20))
# 将刻度条和文字设为黑色,适配白色背景
scale_bar.pen = pg.mkPen('k')
scale_bar.label.setColor(pg.mkColor('k'))

scale_bar.setParentItem(plot.getPlotItem().getViewBox())

plot.show()
app.exec()

关键说明:

  • 子类化ScaleBar后重写paint方法,先绘制一个比刻度条区域稍大的矩形作为背景,用白色填充、黑色描边。
  • 调整bg_rect = bar_rect.adjusted(-5, -5, 5, 5)的数值可以改变背景的内边距,确保文字不会被裁剪。
  • 把刻度条画笔和文字颜色改为黑色,与白色背景形成强烈对比,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:40:57