Захватить курсор Tkinter - PullRequest
0 голосов
/ 12 февраля 2019

Я бы хотел запечатлеть относительное движение мыши с помощью Tkinter.Я присоединяю <Motion> слушателя и могу получить движение мыши.Однако я хотел бы иметь возможность «захватить» / «заблокировать» курсор так, чтобы он был невидимым и не мог покинуть окно (так же, как игра).Моей целью было бы получить относительное движение мыши без ограничения границ окна.Как этого достичь?

1 Ответ

0 голосов
/ 12 февраля 2019

<Motion> привязывается только к корневому окну.Если вы переместите указатель мыши за пределы корневого окна, он больше не будет генерировать координаты курсора мыши по осям x и y.

Для окон я могу думать о том, чтобы периодически получать текущую позицию курсора, иограничить свою позицию.Ниже будет попытаться контролировать положение курсора х в корневом окне.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...