Scrolling is not detected - Pynput

450 Views Asked by At
from pynput.mouse import Listener
from pynput.keyboard import Key, Listener
xy = []
sizes = []
isCtrl = False

size = 11

def on_scroll(x, y, dx, dy):
    global size, sizes
    global isCtrl
    print(isCtrl)
    if isCtrl:
        size += dy
        sizes.append(size)
        print(sizes[-1])
def on_press(key):
    global isCtrl
    if key == Key.ctrl:
        isCtrl = True
    print(isCtrl)
def on_release(key):
    global isCtrl
    if key == Key.ctrl:
        isCtrl = False
    print(isCtrl)

# Collect events until released
with Listener(on_scroll=on_scroll,
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

That is the code. I am really not sure why and how my scroll code is working, as the function is not being called even if I scrolled already. Thanks for a solution in advanced!

1

There are 1 best solutions below

0
On BEST ANSWER

Some mistakes:

  1. You have imported Listener twice, the keyboard listener covered mouse listener.
  2. Keyboard listener doesn't have on_press method.

Consider that you want to monitor both the mouse and the keyboard.You need to create two threads to listen them.Maybe you need:

from pynput.mouse import Listener as mouseListener
from pynput.keyboard import Key, Listener as keyboardListener

xy = []
sizes = []
isCtrl = False

size = 11


def on_scroll(x, y, dx, dy):
    global size, sizes
    global isCtrl
    print(isCtrl)
    if isCtrl:
        size += dy
        sizes.append(size)
        print(sizes[-1])


def on_press(key):
    global isCtrl
    if key == Key.ctrl:
        isCtrl = True
    print(isCtrl)


def on_release(key):
    global isCtrl
    if key == Key.ctrl:
        isCtrl = False
    print(isCtrl)


# Mouse listener
mouse_listener = mouseListener(on_scroll=on_scroll)
mouse_listener.start()

# Keyboard listener
with keyboardListener(on_press=on_press, on_release=on_release) as listener:
    listener.join()