抓住Tkinter光标

时间:2019-02-12 07:27:02

标签: python tkinter

我想使用Tkinter捕获鼠标的相对运动。我附加了一个<Motion>侦听器,并且能够使鼠标移动。但是,我希望能够“抓取” /“锁定”光标,使其不可见并且不能离开窗口(游戏可能相同)。我的目标是在不限制窗口边界的情况下获得相对的鼠标移动。如何实现?

1 个答案:

答案 0 :(得分:1)

<Motion>仅绑定到根窗口。如果将鼠标移到根窗口之外,它将不再生成鼠标光标的x和y位置。

对于Windows,我能想到的是定期获取光标的当前位置,并限制其位置。下面将尝试控制根窗口中光标x的位置。

from tkinter import *
from ctypes import windll, Structure, c_long, byref

root = Tk()
root.geometry("400x200")
user = windll.user32

class Position(Structure):
    _fields_ = [("x", c_long), ("y", c_long)]

def ctrl_x_pos():
    pt = Position()
    windll.user32.GetCursorPos(byref(pt))
    if pt.x < root.winfo_x()+5:
        x = root.winfo_x()+5
        y=pt.y
        user.SetCursorPos(x, y)
    elif pt.x > root.winfo_x()+405:
        x = root.winfo_x()+405
        y = pt.y
        user.SetCursorPos(x, y)
    root.after(5, ctrl_x_pos)

root.after(5,ctrl_x_pos)
root.bind('<Escape>',lambda e: root.destroy())
root.mainloop()