使用pyqt我设置了一个ViewBox小部件,在该小部件内部,我需要记录两次鼠标点击以使用连接点击的pyqtgraph roi绘制一条线。
这是我的基本代码,注释我希望它做什么:
def onClick(ev):
#First mouse click - ONLY register coordinates
#Second mouse click - register coordinates of second click
#Draw line connecting the two clicks
w.scene().sigMouseClicked.connect(onClick)
此代码用于返回鼠标点击并绘制一条线,但我不知道如何让它等待第二次鼠标点击:
def onClick(ev):
x = ev.pos().x()
y = ev.pos().y()
print(x,y)
line = pg.LineSegmentROI([[711,265], [295, 170]], pen=(4,9))
vb.addItem(line)
w.scene().sigMouseClicked.connect(onClick)
答案 0 :(得分:1)
这主要是未经测试的代码,但应该让你到达目的地。基本上,您有一个全局数组,其中包含一组或两组坐标。如果在调用处理程序时数组为空,则表示您正在处理第一次单击,并存储这些坐标。如果数组已经包含一组坐标,那么你正在处理第二次点击,你可以绘制你的线,但不要忘记清空数组,这样如果你第三次点击它就能再次工作
clicks = []
def onClick(ev):
global clicks
x = ev.pos().x()
y = ev.pos().y()
if len(clicks)==0: # First mouse click - ONLY register coordinates
print("First click!")
clicks.append((x,y))
elif len(clicks)==1: # Second mouse click - register coordinates of second click
print("Second click...")
clicks.append((x,y))
# Draw line connecting the two clicks
print("...drawing line")
line = pg.LineSegmentROI(clicks, pen=(4,9))
vb.addItem(line)
# reset clicks array
clicks[:] = [] # this resets the *content* of clicks without changing the object itself
else: # something went wrong, just reset clicks
clicks[:] = []