PyQtGraph中ImageItem调用scale()报错,如何设置缩放?
问题
参考旧教程实现频谱图时,调用ImageItem.scale()设置缩放触发错误:
TypeError: ImageItem.scale() takes no arguments (4 given)
查看源码发现当前调用的是Qt QGraphicsItem的无参scale()函数(仅返回当前缩放值),但教程中的代码是传入两个参数设置x、y方向的缩放:
img.scale(t[-1] / np.size(Sxx, axis=1), f[-1] / np.size(Sxx, axis=0))
解决方法
在新版本的pyqtgraph中,ImageItem不再自带可传参的scale()方法,要分别设置x、y方向的缩放,你可以用以下几种方式:
使用
QGraphicsItem的重载scale方法
直接调用带两个参数的scale(sx, sy)方法,分别传入x、y方向的缩放比例:img.scale(t[-1]/np.size(Sxx, axis=1), f[-1]/np.size(Sxx, axis=0))若仍报错,可换用变换矩阵的方式。
通过变换矩阵设置缩放
借助QTransform构造缩放矩阵,再用setTransform()应用到ImageItem:from PyQt5.QtGui import QTransform # 若使用PySide系列库,导入对应模块的QTransform即可 sx = t[-1] / np.size(Sxx, axis=1) sy = f[-1] / np.size(Sxx, axis=0) img.setTransform(QTransform().scale(sx, sy))直接设置图像显示范围(更适配频谱图场景)
用setRect()定义图像的显示区域,让图像自动匹配时间、频率轴的范围,无需手动计算缩放比例:img.setRect(0, 0, t[-1], f[-1])
内容的提问来源于stack exchange,提问作者ThePumkinMelon
相关产品推荐
相关产品推荐

