【问题标题】:pynput - Importing keyboard and mousepynput - 导入键盘和鼠标
【发布时间】:2019-02-13 18:13:14
【问题描述】:

我在从 pynput 库中导入一些东西时遇到了一些问题。

在我的代码中,我想使用 python 库 (pynput) 在鼠标和键盘上执行一些操作。当我只导入键盘或鼠标时,它可以工作,但有时同时导入两者时,它会给我一些错误。

这是我的代码:

from pynput.mouse import Button, Controller
from pynput.keyboard import Key, Controller

from time import sleep

mouse = Controller()
keyboard = Controller()
rock1x = 691
rock1y = 466
rock2x = 548
rock2y = 350
rock3x = 687
rock3y = 234

while (1):
    drop1x = 1183
    drop1y = 325
    drop2x = 1220
    drop2y = 325
    drop3x = 1263
    drop3y = 325
    drop4x = 1303
    drop4y = 325

    for i in range(8):
        sleep(2.5)
        mouse.position = (rock2x,rock2y)
        sleep(0.3)
        mouse.press(Button.left)
        mouse.release(Button.left)
        sleep(2.1)

        mouse.position = (rock3x,rock3y)
        sleep(0.3)

        mouse.press(Button.left)
        mouse.release(Button.left)
        sleep(2.1)

        mouse.position = (rock1x,rock1y)

        sleep(0.2)
        mouse.press(Button.left)
        mouse.release(Button.left)

    for i in range(3):
        keyboard.press(Key.shift)
        for x in range(6):
            mouse.position = (drop1x,drop1y)
            sleep(0.3)
            mouse.press(Button.left)
            mouse.release(Button.left) 
            drop1y=drop1y+35
        for x in range(6):
            mouse.position = (drop2x,drop2y)
            sleep(0.3)
            mouse.press(Button.left)
            mouse.release(Button.left) 
            drop2y=drop2y+35
        for x in range(6):
            mouse.position = (drop3x,drop3y)
            sleep(0.3)
            mouse.press(Button.left)
            mouse.release(Button.left) 
            drop3y=drop3y+35
        for x in range(6):
            mouse.position = (drop4x,drop4y)
            sleep(0.3)
            mouse.press(Button.left)
            mouse.release(Button.left) 
            drop4y=drop4y+35
        keyboard.release(Key.shift)
    sleep(3)

当我运行此代码时,出现以下错误:

Traceback (most recent call last):
  File "mining.py", line 29, in <module>
    mouse.press(Button.left)
  File "/home/filipe/.local/lib/python2.7/site-packages/pynput/keyboard/_base.py", line 366, in press
    if resolved.is_dead:
AttributeError: 'NoneType' object has no attribute 'is_dead'

但是当我评论第二行时:

from pynput.keyboard import Key, Controller

代码运行到:

keyboard.press(Key.shift)

并给我错误:

Traceback (most recent call last):
  File "mining.py", line 48, in <module>
    keyboard.press(Key.shift)
NameError: name 'Key' is not defined

我应该如何从 pynput 库中导入来使用鼠标和键盘?

【问题讨论】:

  • 错误是什么?你已经尝试过什么?见How do I ask a good question?
  • 感谢您的评论,我已经用一些新信息编辑了我的问题。

标签: python pynput


【解决方案1】:

我认为问题在于您要导入两个不同的Controllers。

第二个 (pynput.keyboard.Controller) 覆盖第一个,因为它是最后一个定义的。因此,您的变量 mouse 实际上是一个 pynput.keyboard.Controller 对象,而不是您预期的 pynput.mouse.Controller 对象。

当您调用mouse.press(Button.left) 时会发生错误,因为Keyboard 对象试图按Button,但它不能这样做(它只能按Keys)。

要解决此问题,请使用 import/as“一般”导入模块,而不是使用 from/import 导入模块的“特定”部分:

import pynput.mouse    as ms
import pynput.keyboard as kb

这样,您可以区分两个控制器:

mouse    = ms.Controller()
keyboard = kb.Controller()

希望这会有所帮助——如有任何反馈,请回复!

【讨论】:

  • 另外,每次使用 Buttonms.ButtonKeykb.Key 时,请务必更改。例如,Button.left 必须更改为 ms.Button.left
  • 谢谢!!您的解决方案有效。我写的代码和你的类似。现在我有'mouse = pynput.mouse.Controller()'和'keyboard = pynput.keyboard.Controller()'。我以这种方式导入库:'from pynput.mouse import Button'、'from pynput.keyboard import Key'和'import pynput'
  • 乐于助人!另外,(我并不是要粗鲁或咄咄逼人,但是)请考虑accepting my answer :)
  • 抱歉,stackoverflow 社区中的新人。有时我忘记做那些事情,我已经接受了你的回答。
猜你喜欢
  • 2019-06-15
  • 2021-06-12
  • 1970-01-01
  • 2021-07-25
  • 2014-09-18
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多