Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按下和释放鼠标时,如何存储鼠标位置?_Python_Python 3.x_Mouseevent_Mouselistener_Pynput - Fatal编程技术网

Python 按下和释放鼠标时,如何存储鼠标位置?

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,

我目前正在用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))

我真的不理解这个模块背后的逻辑。我在网上找到了代码,并尝试将值存储在变量中,但显然不起作用。

要将值存储在外部变量中,您必须使用
全局

但通常所有代码都是在单击时在
内部执行的,然后就不需要使用
全局




但是如果您使用
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获得它。当你得到event
MOUSEBUTTONDOWN
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)