Python. Почему скорость программы реагирует на движение мышью?

Рейтинг: 0Ответов: 2Опубликовано: 14.02.2023

Код на передвижение объекта по нажатию WASD. Если курсор в пределах окна и мышь в движении- скорость работы приложения увеличивается. Почему так происходит?

from tkinter import *

root = Tk()

canvas = Canvas(root, width=600, height=600)
canvas.pack()

id1 = canvas.create_oval(50, 50, 80, 80, fill='red')

action_keys = set()

def pressed_keys(event):
    action_keys.add(event.keysym)

def released_keys(event):
    action_keys.remove(event.keysym)

def come():
    speed_x = -2 * ("a" in action_keys) + 2 * ("d" in action_keys)
    speed_y = -2 * ("w" in action_keys) + 2 * ("s" in action_keys)
    canvas.move(id1, speed_x, speed_y)
    root.after(5, come)

come()

canvas.bind_all('<KeyPress-w>', pressed_keys)
canvas.bind_all('<KeyPress-a>', pressed_keys)
canvas.bind_all('<KeyPress-s>', pressed_keys)
canvas.bind_all('<KeyPress-d>', pressed_keys)

canvas.bind_all('<KeyRelease-w>', released_keys)
canvas.bind_all('<KeyRelease-a>', released_keys)
canvas.bind_all('<KeyRelease-s>', released_keys)
canvas.bind_all('<KeyRelease-d>', released_keys)

root.mainloop()

Ответы

▲ 0Принят

Особенность tkinter. При реализации подобного на pygame данная проблема отсутствует.

▲ 2

Добро пожаловать - оптимизация винды. Система в первую очередь обрабатывает те окна, в которых мышь, и те пиксели, рядом с которыми мышь (по крайней мере с моей GTX 780 это так работает (4K и FHD мониторы, HDMI-DisplayPort и HDMI-HDMI)) находиться рядом. На линуксе, на сколько я знаю, данная проблема гораздо менее заметна. А ещё я люблю МЭШ-линукс оптимизацию - та вообще почти не обрабатывает те окна и программы, которые свёрнуты и/или внизу рабочего стола.