[英]Setting absolute cursor position using python uvdev
I'm trying to simulate a graphics tablet in python, and as a result, I need to be able to set the absolute position of the cursor.我正在尝试在 python 中模拟图形输入板,因此,我需要能够设置光标的绝对位置。 I have tried python-evdev and python-libevdev , but I'm unable to set the absolute position.
我试过python-evdev和python-libevdev ,但我无法设置绝对位置。 Wring values to the EV_ABS ABS_X and ABS_Y simply doesn't take any effect on a cursor position.
将值写入 EV_ABS ABS_X 和 ABS_Y 不会对光标位置产生任何影响。 It worth mentioning that simulated buttons and relative positioning work perfectly.
值得一提的是,模拟按钮和相对定位效果很好。
I'm using Manjaro 4.19 with Gnome on x11.我在 x11 上使用 Manjaro 4.19 和 Gnome。
I would appreciate any help and thank you in advance.我将不胜感激,并在此先感谢您。
Here's simple code which must be able to set the absolute cursor position, but it's not.这是必须能够设置绝对光标位置的简单代码,但事实并非如此。
from evdev import UInput, AbsInfo, ecodes as e
import pyautogui
import subprocess
import time
cap = {
e.EV_KEY : [e.BTN_TOUCH],
e.EV_ABS : [
(e.ABS_X, AbsInfo(0, 0, 4080, 0, 0, 5080)),
(e.ABS_Y, AbsInfo(0, 0, 4080, 0, 0, 5080)),
(e.ABS_PRESSURE, AbsInfo(0, 0, 2040, 0, 0, 0))
]
}
ui = UInput(cap, name='example-device', version=0x3)
for i in range(0,10):
# assign driver to the default display
time.sleep(0.5)
process = subprocess.Popen(["xinput", "list"], shell=True, stdout=subprocess.PIPE)
output = process.stdout.read().decode("utf-8")
print(output)
if "example-device" in output:
print(output)
subprocess.Popen([
"xinput",
"map-to-output",
f"pointer:example-device",
"eDP1"
])
break
else:
raise Exception("Can't map device to display.")
# print cursor position befor cahnge
print(pyautogui.position())
# move mouse cursor
ui.write(e.EV_ABS, e.ABS_X, 20)
ui.write(e.EV_ABS, e.ABS_Y, 20)
ui.syn()
# print cursor position after cahnge
print(pyautogui.position())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.