我正在尝试将 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/

10-12 16:43