我是python / pyside / pyqtgraph的新手,我有点卡在我的程序中。
所以,我有一个代表10000个值的numpy.ndarray,我使用plot方法在PlotWidget中绘制它。 结果还可以,但现在我想让用户选择曲线的点,这样我就可以保存点的X轴并在以后使用它。
我想要做的是创建一个QPushButton,当点击它时,它等待用户通过左键单击选择曲线上的两个点,然后保存X轴。从概念上看似乎很简单,但我找不到这样做的好方法。 如果你能给我一个例子或者其他什么,我会很高兴,我也对任何偏离这个用例的建议持开放态度。
我可以按以下方式恢复代码:
self.myWidget = pyqtgraph.PlotWidget()
self.myWidget.plot(myValues) # myValues is the numpy array
self.select2PointsButton = QtGui.QPushButton()
self.select2PointsButton.clicked.connect(self.waitForSelection)
def waitForSelection(self):
# Wait for a click left on the curve to select first point then save the X-axis
# Do it again to select the second point
谢谢, 摩根
在Zet4回答后编辑:
感谢您的回答,它帮助我开始了。 最后,我创建了PlotWidget的子类:
class PltWidget(pg.PlotWidget):
def __init__(self, parent=None):
super(PltWidget, self).__init__(parent)
self.selectionMode = False
def mousePressEvent(self, ev):
if self.selectionMode:
if ev.button() == QtCore.Qt.LeftButton:
# How do I get the X axis ?
else:
super(PltWidget, self).mousePressEvent(ev)
然后我在我的窗口中使用它,将按钮信号与插槽连接,改变我的PltWidget的布尔值:
..... # Other attributes and connections of my Window
self.T0Button = QtGui.QPushButton()
self.graphicsLeft = PltWidget()
self.T0Button.clicked.connect(self.selectT0)
def selectT0(self):
self.graphicsLeft.selectionMode = not(self.graphicsLeft.selectionMode)
我可能会使用您的缓冲区策略来命令用户进行两次选择。 但是,我仍然需要知道如何从我点击的位置获取PlotWidget的X轴。如果有人使用pyqtgraph知道答案,请告诉我。 感谢。
答案 0 :(得分:0)
我道歉,我不是pyqt专家,但你的问题似乎更具概念性而非技术性。 您可以使用QPushButton.clicked(在您的代码中,waitForSelection函数)来更改对象的功能状态(允许或禁用点选择)。
所以你需要:
您的waitForSelection函数只会反转isSelectedMode的状态。在您不再需要之前,它还会清除缓冲区。伪代码:
if isSelectedMode == true
buffer = null;
isSelectedMode = !isSelectedMode;
onLeftClick将完成更多工作,请参阅此伪代码:
if isSelectedMode == true
if buffer != null // No point save, so this click is the first one
//Here you save your data in the buffer
else
// One point is saved so that's the second one.
// Do what you want with it and buffer
else
// The selection mode is not active.
唯一缺少的是从左键单击获取X轴的方法。 我希望这可以帮到你。 最好的问候