Seite 1 von 1

pynput.mouse funktioniert nicht

Verfasst: Mittwoch 1. Juni 2022, 13:29
von Gödel
Also ich habe pynput installiert und ansich funktioniert es auch gut nur habe ich ein problem mit meinem Programm. Es bewegt die Maus nur wenn ich irgendeine Taste drücke und ich weiß nicht warum, weil eigentlich soll sich die Position der Maus permanent ändern. Kann mir vielleicht jemand helfen?

Code: Alles auswählen

from pynput import keyboard
from pynput.mouse import Controller

def escape():
    with keyboard.Events() as events:
        for event in events:
            if event.key == keyboard.Key.esc:
                return False
            else:
                return True

mouse = Controller()
run = True
while run:
    run = escape()
    position = mouse.position
    x, y = position
    x += 1
    y += 1
    mouse.position = (x, y)

print('Finished')
print('Now we have moved it to {0}'.format(
    mouse.position))
Danke schon mal für Antworten.

Re: pynput.mouse funktioniert nicht

Verfasst: Mittwoch 1. Juni 2022, 14:10
von __blackjack__
@Gödel: Das stimmt nicht. Das Problem ist Deine `escape()`-Funktion blockiert bis eine Taste gedrückt wurde. Das nächste Problem ist dann, dass man von dem Events-Objekt nicht ständig neue erzeugen darf. Zumindest bei einem X-Server endet das schnell in einer Fehlermeldung, dass zu viele X-Clients erstellt wurden.

Das hier funktioniert bei mir:

Code: Alles auswählen

#!/usr/bin/env python3
from pynput.keyboard import Events, Key
from pynput.mouse import Controller


def check_for_escape(events):
    event = events.get(0.01)
    return event and event.key == Key.esc


def main():
    with Events() as events:
        mouse = Controller()
        while not check_for_escape(events):
            x, y = mouse.position
            mouse.position = (x + 1, y + 1)

        print("Finished")
        print(f"Now we have moved it to {mouse.position}")


if __name__ == "__main__":
    main()

Re: pynput.mouse funktioniert nicht

Verfasst: Mittwoch 1. Juni 2022, 14:33
von Gödel
Oh danke, das wusste ich nicht.