For the Pynput module in python 3, key is not defined - python

This is my code.
from pynput.mouse import Button, Controller #Allows input to the game
from pynput.keyboard import Controller
mouse = Controller()
keyboard = Controller()
keyboard.press(Key.escape)
keyboard.release(Key.escape)
Why is "Key" not defined when all the sites I've looked at specifically say to use it without adding in anything else?
Sites:
https://pypi.org/project/pynput/
https://pynput.readthedocs.io/en/latest/
https://pythonhosted.org/pynput/keyboard.html

You have to import it first, as the example in the first link you provided showed:
from pynput.keyboard import Key

Related

Is there a way to edit the maximum CPS in pynput?

So recently I've been using pynput and I have noticed that no matter the delay I set it as the maximum CPS with pynput is always 10 cps. Now in pyautogui you can edit the hard coded pause between clicks, but I was wondering if this is possible in pynput.
For example:
import pynput
from pynput.mouse import Button as btn
from pynput.mouse import Controller
import time
mouse = Controller()
delay = 0
mouse.click(btn.left)
time.sleep(delay)
No matter what you change the "delay" value to, the max CPS is always 10 with Pynput, and trying "pynput.PAUSE = 0.01" doesn't change the output.

Why does the way pynput.mouse.Controller is imported matter?

I am using pynput.mouse.Controller to listen for certain mouse actions and also using it to navigate to certain targets.
When I import Controller as follows: from pynput.mouse import Controller everything works fine and the programs runs smoothly.
However, when I do this instead import pynput.mouse.Controller I receive an error telling ModuleNotFoundError: No module named 'pynput.mouse.Controller'
Unless I am having a fundemental misunderstanding, these lines should function the same. Is there any reason why one produces an error but the other doesn't?
import imports modules or packages (directories with __init__.py), it cannot import objects from modules. This doesn't work:
import pynput.mouse.Controller
This work:
import pynput.mouse
Controller = pynput.mouse.Controller
This also work:
from pynput input mouse
Controller = mouse.Controller
And this:
from pynput.mouse import Controller

randomize the time from time.sleep

I'm fairly new to python and have been trying to write a script that automates a string of text. The problem is that i don't know how to randomize the time.sleep function. I have also tried adding the time in range function but still can't get it to randomize it.
The code looks like this at the moment. I have to get rid of the time.sleep(40) to randomize it
import time
from pynput.keyboard import Key, Controller
while True:
keyboard = Controller()
time.sleep(40)
for char in "nnnn":
keyboard.press(char)
keyboard.release(char)
time.sleep(0.21)
Use the random module
import random
import time
from pynput.keyboard import Key, Controller
while True:
keyboard = Controller()
sleep_time = random.randrange(0, 100)
time.sleep(sleep_time)
for char in "nnnn":
keyboard.press(char)
keyboard.release(char)
time.sleep(0.21)

Not able to select text in pynput

I'm writing a python script using pynput library, in which I want to select the text of particular length.
For that I'm first pressing shift and then pressing multiple times left arrow key. So that the text left to the cursor id selected and can be further used for copying purpose.
Here is my code:
from pynput import keyboard
from pynput.keyboard import Controller
keyboard_controller = Controller()
with keyboard_controller.pressed(keyboard.Key.shift_l):
keyboard_controller.press(keyboard.Key.left)
keyboard_controller.release(keyboard.Key.left)
keyboard_controller.press(keyboard.Key.left)
keyboard_controller.release(keyboard.Key.left)
keyboard_controller.press(keyboard.Key.left)
keyboard_controller.release(keyboard.Key.left)
This moves my cursor to left by 3 steps but even if the shift is pressed, the text is not getting selected. What I'm missing here?
Edit:
OS: Windows 10
Environment: Python 3.6.5
Here is demo of what is happening in my vs code.
Maybe try this?
from pynput.keyboard import Key
from pynput.keyboard import Controller
keyboard = Controller()
Option 1:
with keyboard.pressed(Key.shift):
keyboard.press(Key.left)
keyboard.release(Key.left)
keyboard.press(Key.left)
keyboard.release(Key.left)
Option 2:
keyboard.press(Key.shift)
keyboard.press(Key.left)
keyboard.release(Key.left)
keyboard.press(Key.left)
keyboard.release(Key.left)
keyboard.release(Key.shift)
Option 3:
keyboard.press(Key.shift.value)
keyboard.press(Key.left.value)
keyboard.release(Key.left.value)
keyboard.press(Key.left.value)
keyboard.release(Key.left.value)
keyboard.release(Key.shift.value)
Here is video proof it works on my machine :)
I've just toyed around with pynput and pyautogui and finally found a combination using pynput that will complete this shift hotkey function. I was using page_down rather than arrow keys for my code but I confirmed that both work. For some reason if you press down both the shift key and shift_r key, you are able to highlight text by moving the cursor.
Setup:
from pynput.keyboard import Key, Controller
keyboard = Controller()
Code:
keyboard.press(Key.shift)
keyboard.press(Key.shift_r)
keyboard.press(Key.page_down) # or keyboard.press(Key.left)
keyboard.release(Key.page_down) # or keyboard.release(Key.left)
keyboard.release(Key.shift_r)
keyboard.release(Key.shift)

python keyboard.press not working with other applicatons

I have made a python script that presses space once a second so I can go AFK in games and not get kicked for being idle. I tested it in notepad and it works but when i open Minecraft or Roblox nothing happens.
I did try looking for an answer but couldn't find anything
from pynput.keyboard import Key, Controller
import time
keyboard = Controller()
while True:
time.sleep(1)
keyboard.press(' ')
keyboard.release(' ')
Sometimes games won't recognize a super-short key press. You essentially have a space press of less than a microseconds. Try adding a delay between the press and release.
from pynput.keyboard import Key, Controller
import time
keyboard = Controller()
while True:
time.sleep(1)
keyboard.press(' ')
time.sleep(0.15)
keyboard.release(' ')
you should probably run the cmd as administrator and put in some delay for keys to be registered. play around with the values of the delay to find one that suits your need
from pynput.keyboard import Key, Controller
import time
import keyboard
keyboard = Controller()
while 1:
if keyboard.is_pressed('r'):
while True:
time.sleep(1)
keyboard.press('space')

Categories