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

