当按下鼠标并释放鼠标时,如何保存鼠标位置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当按下鼠标并释放鼠标时,如何保存鼠标位置?相关的知识,希望对你有一定的参考价值。
我目前正在使用python开发棋盘项目。我需要存储鼠标按下时的位置,以查看(x,y)坐标是否接触到一块。
[如果是的话,直到鼠标释放之前,棋子的坐标将与鼠标的坐标相同。我想创建一块跟随鼠标的效果。
然后,当发布它时,我想存储发布它的地方的代码,以便与这些一起使用。我听说过pynput并安装了它,但我仍然是新手。
这不在我的主文件中,但是它是在单击时获取鼠标位置的尝试:
from pynput import mouse
mx, my = 0, 0
def on_click(x, y, button, pressed):
print('0 at 1'.format(
'Pressed' if pressed else 'Released',
(x, y)))
mx = x
my = y
if not pressed:
# Stop listener
return False
with mouse.Listener(
on_click=on_click) as listener:
listener.join()
print(str(mx) + str(my))
我不太了解该模块背后的逻辑。我在网上找到了代码,并试图将值存储在变量中,但显然不起作用。
答案
要在外部变量中存储值,您必须使用global
但是通常所有代码都在on_click
内部执行,因此不需要使用global
from pynput import mouse
pressed_x = 0
pressed_y = 0
released_x = 0
released_y = 0
is_pressed = False
is_released = False
def on_click(x, y, button, pressed):
global pressed_x
global pressed_y
global released_x
global released_y
global is_pressed
global is_released
# store in external variables
if pressed:
is_pressed = True
pressed_x = x
pressed_y = y
#print('LISTENER: pressed:', pressed_x, pressed_y)
else:
is_released = True
released_x = x
released_y = y
#print('LISTENER: released:', released_x, released_y)
#if not pressed:
# # Stop listener
# return False
# --- main ---
# start listener at the beginning
listener = mouse.Listener(on_click=on_click)
listener.start()
# use variables in your code
while True:
if is_pressed:
print('RUN: pressed:', pressed_x, pressed_y)
is_pressed = False
if is_released:
print('RUN: released:', released_x, released_y)
is_released = False
# stop listener at the end
listener.stop()
listener.join()
print('END: pressed:', pressed_x, pressed_y)
print('END: released:', released_x, released_y)
但是如果您使用pygame
,pyglet
或任何GUI框架(tkinter
,PyQT
,PySide
,wxPython
,PyGTK
,Kivy
等),则它们具有自己的方法获取鼠标位置(bind()
,signals
,events
等),而无需使用pynput
。
以上是关于当按下鼠标并释放鼠标时,如何保存鼠标位置?的主要内容,如果未能解决你的问题,请参考以下文章