我正在尝试将 pyqtgraph 中的自定义 AxisItem 添加到由 Qt Designer 生成的现有 PlotWidget。有相关主题 here ,但代码示例没有确切答案,我无法发表评论,所以我创建了一个新主题。
这是我的自定义 AxisItem(基于 this 代码):
import pyqtgraph as pg
import datetime
def int2td(ts):
return(datetime.timedelta(seconds=float(ts)/1e6))
class TimeAxisItem(pg.AxisItem):
def __init__(self, *args, **kwargs):
super(TimeAxisItem, self).__init__(*args, **kwargs)
def tickStrings(self, values, scale, spacing):
return [int2dt(value).strftime("%H:%M:%S") for value in values]
这是我的主要 QtPlotter 类:
from pyqtgraph.Qt import QtGui
from template_pyqt import Ui_Form # Ui_Form is generated by Qt Designer
class QtPlotter:
def __init__(self):
self.app = QtGui.QApplication([])
self.win = QtGui.QWidget()
self.ui = Ui_Form()
self.ui.setupUi(self.win)
self.win.show()
self.ui_plot = self.ui.plot
self.ui_plot.showGrid(x=True, y=True)
然后我尝试添加我的自定义 AxisItem:
self.ui_plot.getPlotItem().axes['bottom']['item'] = TimeAxisItem(orientation='bottom')
我没有错误,但这不会产生任何效果。
最佳答案
我知道这是一篇旧帖子,但我遇到了类似的问题,并在 this gist example 中找到了一个解决方案,这是一个实现 attachToPlotItem
方法的 AxisItem 子类。
所以关于原来的帖子,而不是
self.ui_plot.getPlotItem().axes['bottom']['item'] = TimeAxisItem(orientation='bottom')
您需要在 TimeAxisItem 子类中使用以下方法(从上面链接的示例中复制):
def attachToPlotItem(self, plotItem):
"""Add this axis to the given PlotItem
:param plotItem: (PlotItem)
"""
self.setParentItem(plotItem)
viewBox = plotItem.getViewBox()
self.linkToView(viewBox)
self._oldAxis = plotItem.axes[self.orientation]['item']
self._oldAxis.hide()
plotItem.axes[self.orientation]['item'] = self
pos = plotItem.axes[self.orientation]['pos']
plotItem.layout.addItem(self, *pos)
self.setZValue(-1000)
它甚至保留了原始的 AxisItem,以便在需要时可以重新设置它。
然后在你的 QtPlotter 构造函数中,你会添加
axis = TimeAxisItem(orientation='bottom')
axis.attactToPlotItem(self.ui_plot.getPlotItem())
关于python - 如何将自定义 AxisItem 添加到现有 PlotWidget?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42886849/