Python 按下和释放鼠标时,如何存储鼠标位置?
我目前正在用python进行一个棋盘项目。我需要存储鼠标按下时的位置,以查看(x,y)坐标是否接触到一个工件 如果是,则工件的坐标将与鼠标的坐标相同,直到释放鼠标。我想创建一个效果,那就是一块正在跟随鼠标 然后,当它发布时,我想存储它发布的地方的坐标,以便使用这些坐标。 我听说了pynput并安装了它,但我对它还是新手 这不在我的主文件中,但它试图在单击时获取鼠标的位置:Python 按下和释放鼠标时,如何存储鼠标位置?,python,python-3.x,mouseevent,mouselistener,pynput,Python,Python 3.x,Mouseevent,Mouselistener,Pynput,我目前正在用python进行一个棋盘项目。我需要存储鼠标按下时的位置,以查看(x,y)坐标是否接触到一个工件 如果是,则工件的坐标将与鼠标的坐标相同,直到释放鼠标。我想创建一个效果,那就是一块正在跟随鼠标 然后,当它发布时,我想存储它发布的地方的坐标,以便使用这些坐标。 我听说了pynput并安装了它,但我对它还是新手 这不在我的主文件中,但它试图在单击时获取鼠标的位置: from pynput import mouse mx, my = 0, 0 def on_click(x, y,
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))
我真的不理解这个模块背后的逻辑。我在网上找到了代码,并尝试将值存储在变量中,但显然不起作用。要将值存储在外部变量中,您必须使用
全局
但通常所有代码都是在单击时在内部执行的,然后就不需要使用全局
但是如果您使用pygame
,pyglet
或任何GUI框架(tkinter
,PyQT
,PySide
,wxPython
,PyGTK
,Kivy
,等等),那么它们有自己的方法来获取鼠标位置(bind()
,signals
,事件
,等等)而且不需要使用pynput
这是以前问过的问题:最近在Tkinter的chessboard中编写了一个国际象棋引擎,请保持联系……希望从您那里了解更多信息,向我们展示您迄今为止编写的代码。它是如何收听mouseup/mousedown事件的?@BhosaleShrikant这基本上是我高中的最后一个项目。我想编写一个棋盘,就像你能在网上找到的实际棋盘一样。虽然我对python一无所知(从我开始学习到现在已经4个月了),但我正在学习实现这一目标所需的所有知识:类、字典、pygame,现在我正试图找出如何使用图像。@DhiNas完成后请与我共享代码,我的棋盘是Tkinter按钮的布局,所以没有遇到鼠标位置问题哇谢谢!我试过你的代码,现在它实际上解决了我的问题!虽然我使用的是pygame,这段代码在我的屏幕上显示了鼠标的位置,但有没有办法在pygame屏幕上执行此操作?pygame必须使用文本创建sufrace,您必须在屏幕上blit()
。顺便说一句:如果你只想知道鼠标在Pygame窗口中的当前位置,而不是它在桌面上的位置,那么你可以通过Pygame.event获得它。当你得到eventMOUSEBUTTONDOWN
,MOUSEBUTTONUP
,MOUSEMOTION
时,你应该在`event.pos'中获得它的位置。还有
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)