Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我认为它可以';不要移动鼠标光标_Python_Uinput - Fatal编程技术网

Python 我认为它可以';不要移动鼠标光标

Python 我认为它可以';不要移动鼠标光标,python,uinput,Python,Uinput,当我以脚本的形式运行它时,它不能移动光标 python main.py 但是,当我使用Python interactive一步一步地运行时,效果很好 import uinput import Tkinter as tk root = tk.Tk() screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() root.destroy() device = uinput.Device([

当我以脚本的形式运行它时,它不能移动光标

python main.py
但是,当我使用Python interactive一步一步地运行时,效果很好

import uinput
import Tkinter as tk

root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.destroy()

device = uinput.Device([
         uinput.BTN_LEFT,
         uinput.BTN_RIGHT,
         uinput.REL_X,
         uinput.REL_Y,
         ])
def main():
    device.emit(uinput.REL_X, -1 * screen_width)
    device.emit(uinput.REL_Y, -1 * screen_height)
if __name__ == '__main__':
    main()
这是一个不移动光标的命令

spksoft@spksoft ~/code/python/Sample HI $ python main.py
Traceback (most recent call last):
  File "main.py", line 13, in <module>
    uinput.REL_Y,
  File "/usr/local/lib/python2.7/dist-packages/uinput/__init__.py", line 161, in __init__
    self.__uinput_fd = _libsuinput.suinput_open()
  File "/usr/local/lib/python2.7/dist-packages/uinput/__init__.py", line 64, in _error_handler
    raise OSError(code, os.strerror(code))
OSError: [Errno 13] Permission denied
spksoft@spksoft ~/code/python/Sample HI $ sudo python main.py
spksoft@spksoft ~/code/python/Sample HI $

测试视频:

至少在X11下,因为您的测试代码完成得太突然,所以在代码退出之前,没有时间创建设备的处理程序。
当代码退出时,仅针对这些测试用例的解决方案是添加
time.sleep()
命令。
在现场运行条件下,不需要这样做

import uinput
import Tkinter as tk
import time
root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.destroy()

device = uinput.Device([
         uinput.BTN_LEFT,
         uinput.BTN_RIGHT,
         uinput.REL_X,
         uinput.REL_Y,
         ])
def main():
    time.sleep(1)
    device.emit(uinput.REL_X, -1 * screen_width)
    device.emit(uinput.REL_Y, -1 * screen_height)
if __name__ == '__main__':
    main()

您是否确认已正确计算了
screen\u width
screen\u height
?可能是您的计算导致光标移动零像素。是的,我想将光标移动到零位置(0,0)。当我复制并粘贴到python interactive上时,代码可以正常工作,但当我使用这个命令“python main.py”以脚本形式运行它时,它不会显示任何错误,但不会移动光标。这并不能回答我的问题。您是否验证了
-1*screen\u width
是否返回了您认为返回的内容?对不起,我的回答是,我已经验证了。屏幕宽度和屏幕高度包含我的分辨率,我将它们相乘,因为我想将光标移动到零位置。我已经将“-1*屏幕宽度”和“-1*屏幕高度”更改为常量,例如1、2、3。。。但它不会移动光标。有关更多信息,我录制了一段测试视频
import uinput
import Tkinter as tk
import time
root = tk.Tk()

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.destroy()

device = uinput.Device([
         uinput.BTN_LEFT,
         uinput.BTN_RIGHT,
         uinput.REL_X,
         uinput.REL_Y,
         ])
def main():
    time.sleep(1)
    device.emit(uinput.REL_X, -1 * screen_width)
    device.emit(uinput.REL_Y, -1 * screen_height)
if __name__ == '__main__':
    main()