繁体   English   中英

使用key_press_event为不同类型的pick_event选择一个“模式”

[英]Using key_press_event to select a 'mode' for different types of pick_event

我一直在努力创建一个交互式情节选择器,其中有3个不同的pick_events。 这些pick_events每个都有一个计算。 我想按“ 1”,“ 2”或“ 3”,这将是对应的pick_event的一种模式,我希望它保持在该模式下,直到按下另一种模式为止。 到目前为止,我已经尝试了这段代码,但是我对OOP缺乏经验并尝试学习。

class MyClick(object):
    def __init__(self):

    def pick(self, event):
        artist = event.artist
        xmouse, ymouse = event.mouseevent.xdata, event.mouseevent.ydata
        self.x, self.y = np.array(artist.get_xdata()),np.array(artist.get_ydata())
        self.ind = event.ind
        #self.maxind = self.y[self.ind].argsort()[-1:] #[::-1]
        #axes.plot(x[ind[self.maxind]],y[ind[self.maxind]],'*')
        #figure.canvas.draw()

    def press(self, event):
        sys.stdout.flush()
        if event.key == '1':
            # peak
            self.maxind = self.y[self.ind].argsort()[-1:] #[::-1]
            print(y[ind[self.maxind]])
        elif event.key == '2':
            # onset
            print('onset')
        elif event.key == '3':
            # offset
            print('offset')
        else:
            print('wrong key press')

if __name__ == "__main__":
    figure = plt.figure()
    axes = figure.add_subplot(1, 1, 1)
    data_plot, = axes.plot(Frame, R_Fz_dn_bc , picker=5) #plot data
    axes.autoscale(tight=True)

    browser = MyClick()
    cid = figure.canvas.mpl_connect('pick_event', browser.pick)
    cid = figure.canvas.mpl_connect('key_press_event', browser.press)

    plt.show()

我省略了一些无法处理的代码。 我尝试了3种不同的选择器功能,但还尝试了一种选择器功能以及每个按键事件功能中的计算。 任何帮助将是巨大的感谢。 我已经为此苦苦挣扎了好几个星期了。 我也在寻找一种方法来将点选入一个numpy数组中,以便以后可以进行其他计算。

谢谢!

PS:如果对此有先前的话题,我深表歉意。 我什么都没找到,所以如果有指向我的地方!

您可以使用press()方法将最后一次按下的按键记录为MyClick实例的属性,然后在pick()方法中检查当前处于哪种模式并进行适当的计算:

class MyClick(object):

    def __init__(self):

        # initialize mode
        self._mode = 1

    def pick(self, event):
        """do some calculation depending on the last key pressed"""

        if self._mode == 1:
            # do something...
            pass

        elif self._mode == 2:
            # do something different...
            pass

        elif self._mode == 3:
            # do something else entirely...
            pass

    def press(self, event):
        """record last key pressed"""

        if event.key == '1':
            self._mode = 1

        elif event.key == '2':
            self._mode = 2

        elif event.key == '3':
            self._mode = 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM