Что вызывает эту ошибку "struct.error: обязательный аргумент не является целым числом"? - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь создать скрипт, при открытии которого он спрашивает, хочу ли я запустить функцию прокрутки, которая выполняет прокрутку, или функцию прижима, которая нажимает правую клавишу и ждет 5 секунд
Но когда функция прижима срабатывает, это дает мне эту ошибку

struct.error: required argument is not an integer
Что вызывает эту ошибку?

import time
from pynput.keyboard import Key,Controller
from pynput.mouse import Button, Controller
time.sleep(1)
n = 0
keyboard = Controller()
mouse = Controller()
def presser():
    global n
    n = n+1
    keyboard = Controller()
    keyboard.press(Key.right)
    keyboard.release(Key.right)
    if n == 1:
        print('Key Pressed 1 time!')
    else:
        print('Key Pressed', n ,'times!')    
    time.sleep(5)
    presser()
def scroller():
    mouse.scroll(0,-10)
    scroller()
    time.sleep(1)
def starter():
    x = input(' clicker or scroller ').lower()
    if x == 'clicker':
        presser()
    elif x == 'scroller':
        scroller()
starter()

Ошибка с трассировкой: -

  File "Funk.py", line 30, in <module>
    starter()
  File "Funk.py", line 27, in starter
    presser()
  File "Funk.py", line 12, in presser
    keyboard.press(Key.right)
  File "/home/asg/anaconda3/lib/python3.7/site-packages/pynput/mouse/_base.py", line 90, in press
    self._press(button)
  File "/home/asg/anaconda3/lib/python3.7/site-packages/pynput/mouse/_xorg.py", line 95, in _press
    Xlib.ext.xtest.fake_input(dm, Xlib.X.ButtonPress, button.value)
  File "/home/asg/anaconda3/lib/python3.7/site-packages/Xlib/ext/xtest.py", line 100, in fake_input
    y = y)
  File "/home/asg/anaconda3/lib/python3.7/site-packages/Xlib/protocol/rq.py", line 1459, in __init__
    self._binary = self._request.to_binary(*args, **keys)
  File "/home/asg/anaconda3/lib/python3.7/site-packages/Xlib/protocol/rq.py", line 1141, in to_binary
    return self.to_binary(*varargs, **keys)
  File "<string>", line 2, in to_binary
struct.error: required argument is not an integer

1 Ответ

1 голос
/ 23 апреля 2020

У вас есть два оператора импорта, которые импортируют что-то, называемое Controller, из двух разных модулей. Предположительно это разные классы с разным использованием. Я думаю, что второй импорт заменяет первый, поэтому каждый раз, когда вы ссылаетесь на Controller, это тот из модуля мыши. Появляется в presser() вы хотите использовать тот из модуля клавиатуры.

Итак, вы вызываете функцию press () контроллера мыши с аргументом, предназначенным для функции контроллера клавиатуры. Я подозреваю, что это является причиной ошибки.

Вам нужно написать свой импорт, чтобы эти два класса были различны. Вы можете сделать это, просто импортировав весь модуль и полностью уточнив имена классов. Или вы можете сделать это с помощью псевдонимов классов на входе, таких как:

from pynput.keyboard import Key, Controller as KeyboardController
from pynput.mouse import Button, Controller as MouseController
...