2013-08-09 31 views
6

Mam matplotlib i ja stworzyliśmy button_press_event takiego:matplotlib: Jak odebrać kliknięcie shift na rysunku?

self.fig.canvas.mpl_connect('button_press_event', self.onClick) 

def onClick(self, event) 
    if event.button == 1: 
     # draw some artists on left click 

    elif event.button == 2: 
     # draw a vertical line on the mouse x location on wheel click 

    elif event.button == 3: 
     # clear artists on right click 

Teraz jest to możliwe, aby zmodyfikować obsługi click wheel aby coś takiego

elif event.button == 2 or (event.button == 1 and event.key == "shift"): 
     # draw a vertical line on the mouse x location 
     # on wheel click or on shift+left click 
     # (alternative way if there is no wheel for example) 

Wydaje się, że nie robi button_press_event klawisze pomocy i key_press_event nie obsługuje kliknięć przyciskiem myszy, ale nie jestem pewien.

Czy istnieje sposób?

Odpowiedz

9

Można także powiązać naciśnięcie klawisza i wydarzenia zwolnić i zrobić coś takiego:

self.fig.canvas.mpl_connect('key_press_event', self.on_key_press) 
self.fig.canvas.mpl_connect('key_release_event', self.on_key_release) 

... 

def on_key_press(self, event): 
    if event.key == 'shift': 
     self.shift_is_held = True 

def on_key_release(self, event): 
    if event.key == 'shift': 
     self.shift_is_held = False 

Następnie można sprawdzić w funkcji onClick jeżeli self.shift_is_held.

if event.button == 3: 
    if self.shift_is_held: 
     do_something() 
    else: 
     do_something_else() 
+0

wydaje się dobrym pomysłem i obejście dopóki nie zostanie wdrożone właściwe wsparcie dla klawiszy modyfikujących z przyciskami myszy. Dzięki Viktor! – NotNone

0

Jeśli jesteś na Qt następnie można po prostu użyć:

def onClick(self, event) 
    # queries the pressed modifier keys 
    mods = QGuiApplication.queryKeyboardModifiers() 
    if event.button == 1 mods == Qt.ShiftModifier: 
     # do something when shift-clicking