我知道这是一个问题,但即使在查看并尝试使用本网站上的所有解决方案之后,也没有解决我的问题。这是我的代码:
def trackMouse():
global x, y
x = 0
y = 0
x_max = 1000
y_max = 1000
keyboardEvent = evdev.InputDevice('/dev/input/event0')
mouseEvent = evdev.InputDevice('/dev/input/event1')
async def print_events(device):
async for event in device.async_read_loop():
if event.type == ecodes.EV_REL:
if event.code == ecodes.REL_X:
print("REL_X")
x += 1
if event.code == ecodes.REL_Y:
print("REL_Y")
y += 1
if event.type == ecodes.EV_KEY:
c = categorize(event)
if c.keystate == c.key_down:
print(c.keycode)
for device in keyboardEvent, mouseEvent:
asyncio.ensure_future(print_events(device))
loop = asyncio.get_event_loop()
loop.run_forever()
我在运行此循环时遇到的错误是:
任务例外从未检索 未来:.print_events()完成,在etho.py:113上定义 Trackback(最近的最新电话):
文件"/usr/lib/python3.5/asyncio/tasks.py",第239行,in _step
结果= coro.send(none)
文件" Etho.py",第124行,在print_events
如果x = 1:
unboundlocalerror:分配前引用的本地变量'x'
无论我在何处分配变量或声明它,当我尝试在if语句中使用或添加它时,它都会丢弃错误,但是当我设置它等于数字时,它不会。我认为这与它所处的怪异循环有关。
print_events
将x
和y
视为本身的局部性,因为它们在函数内部修改,并且在函数内部没有声明全局。由于您想修改它们,因此需要在print_events
中添加它们全局:
async def print_events(device):
global x, y
async for event in device.async_read_loop():
...
请注意,将它们传递为参数将无法使用,因为您要在功能中修改它们并访问函数之外的修改值。