我来自IDL,发现在Python中获取鼠标单击时的x-y位置并不容易,除了tkinter这种用大材小用的方法。有人知道是否有一个Python包含一个简单地返回x-y坐标的方法吗(类似于IDL中的cursor方法)?
我来自IDL,发现在Python中获取鼠标单击时的x-y位置并不容易,除了tkinter这种用大材小用的方法。有人知道是否有一个Python包含一个简单地返回x-y坐标的方法吗(类似于IDL中的cursor方法)?
有许多库可供使用,以下是两个第三方库:
使用 PyAutoGui
一种强大的 GUI 自动化库,可以获得屏幕大小、控制鼠标、键盘等。
要获取位置,只需要使用 position()
函数即可。下面是一个示例:
>>>import pyautogui
>>>pyautogui.position()
(1358, 146)
>>>
其中1358
是X位置,146
是Y位置。
相关的文档链接
使用Pynput
另一个(更精简的)库是Pynput:
>>> from pynput.mouse import Controller
>>> mouse = Controller()
>>> mouse.position
(1182, 153)
>>>
其中,1182
是X位置,153
是秒数。
这个库学起来非常容易,不需要依赖项,非常适合像这样的小任务(PyAutoGui会过度杀伤)。但是,它提供的功能并不是很多。
Windows特定:
对于特定于平台的但默认的库选项(尽管您可能仍然考虑它们为过度杀伤),可以在此处找到:Python中获取光标位置。
使用 PyMouse
:
>>> import pymouse
>>> mouse = pymouse.PyMouse()
>>> mouse.position()
(231L, 479L)
PyMouseEvent
зұ»жқҘзӣ‘еҗ¬йј ж ҮзӮ№еҮ»дәӢ件гҖӮиҜ·еҸӮйҳ…PyUserInputйЎөйқўдёҠзҡ„вҖңClickonacciвҖқзӨәдҫӢгҖӮ - Kevin我前几天写了这个函数。它可以在鼠标右键或左键点击时获取颜色或位置:
#Add Any helpfull stuff in functions here for later use
def GetMouseInfos(WhatToGet="leaving emety will get you x and y", GetXOnly=False, GetYOnly=False, GetColor=False, Key='Right', OverrideKey=False):#gets color of whats under Key cursor on right click
try:
import win32api
except ModuleNotFoundError:
print("win32api not found, to install do pip install pywin32")
try:
import time
except ModuleNotFoundError:
print("time not found, to install do pip install time?")
try:
import pyautogui
except ModuleNotFoundError:
print("py auto gui not found, to install do pip install pyautogui")
#--------------------------------------------------------------
#above checks if needed modules are installed if not tells user
#code below is to get all varibles needed
#---------------------------------------------------------------
print(WhatToGet)
if OverrideKey:
Key_To_click = Key
if Key == 'Left':
Key_To_click = 0x01
if Key == 'Right':
Key_To_click = 0x02
if Key == 'Wheel':
Key_To_click = 0x04
state_left = win32api.GetKeyState(Key_To_click) # Left button up = 0 or 1. Button down = -127 or -128
IsTrue = True
while IsTrue:
a = win32api.GetKeyState(Key_To_click)
if a != state_left: # Button state changed
state_left = a
if a < 0:
global Xpos, Ypos
Xpos, Ypos = win32api.GetCursorPos()
x, y = pyautogui.position()
pixelColor = pyautogui.screenshot().getpixel((x, y))
else:
posnowX, posnowY = win32api.GetCursorPos()
win32api.SetCursorPos((posnowX, posnowY))
IsTrue = False#remove this for it to keep giving coords on click without it just quitting after 1 click
time.sleep(0.001)
#--------------------------------------------------------------------
#The Code above is the code to get all varibles and code below is for the user to get what he wants
#--------------------------------------------------------------------
if GetXOnly: #Checks if we should get Only X (def options) the command to do this would be GetKeyInfos("Click To get X ONLY", True)
if GetYOnly:
return(Xpos , Ypos)
if GetColor:
return(Xpos, pixelColor)
return(Xpos)
if GetYOnly: #Checks if we should get Only Y (def options) the command to do this would be GetKeyInfos("Click To get X ONLY",False, True)
if GetXOnly:
return(Xpos , Ypos)
if GetColor:
return(Ypos, pixelColor)
return(Ypos)
if GetColor:
return(pixelColor) #Checks
return(Xpos, Ypos)
# getKeyinfos("Anything here without any other guidelines will give u x and y only on right click")
matplotlib
的工具,称为 ginput
。
每次单击鼠标时,所选点的[x,y]
坐标存储在变量中。# show image
fig, ax=plt.subplots()
ax.imshow(img)
# select point
yroi = plt.ginput(0,0)
使用ginput(0,0)
可以在图表或图片上选择任意点。
这里是ginput文档
的链接
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.ginput.html
import pygame
mouse_pos = pygame.mouse.get_pos()
def callback(event):
print("clicked at: ", event.x, event.y)
canvas.bind("<Button-1>", callback)
如何在不使用 Tkinter
的情况下,捕获鼠标左键点击时的坐标 (x,y)?
很简单:
pynput
(使用 pip install pynput
命令(不要输入'i'))。from pynput.mouse import Listener
def on_click(x, y, button, pressed):
x = x
y = y
print('X =', x, '\nY =', y)
with Listener(on_click=on_click) as listener:
listener.join()
x=x
和y=y
是什么?你需要它们吗?如果我获得了两组坐标并希望使用这些值继续执行程序,我该如何停止循环? - theozhdef get_mouse_click_coor(x, y):
print(x, y)
turtle.onscreenclick(get_mouse_click_coor)
turtle.mainloop()
,这样当你单击时屏幕将保持打开状态。 - quicksilver你们都把它想得太难了,其实它就像这样简单:
import pyautogui as pg
pos = pg.position()
# for x pos
print(pos[0])
# for y pos
print(pos[1])
tkinter
(例如:https://dev59.com/pm035IYBdhLWcg3wTuJu)。这方面有什么问题吗? - Gabriel