简体   繁体   English

使用python uvdev设置绝对光标位置

[英]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-evdevpython-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())

Ok.好的。 I think to solve this you need to add BTN_TOOL_PEN to EV_KEY.我认为要解决这个问题,您需要将 BTN_TOOL_PEN 添加到 EV_KEY。 At least this is worked for me.至少这对我有用。 If you are interested you can see the whole project on my github .如果您有兴趣,可以在我的 github上查看整个项目。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM