为啥当我让这个函数返回它的值时,函数会无限重复自己?
Posted
技术标签:
【中文标题】为啥当我让这个函数返回它的值时,函数会无限重复自己?【英文标题】:Why when I make this function return its value, the function repeats itself infinitely?为什么当我让这个函数返回它的值时,函数会无限重复自己? 【发布时间】:2022-01-17 13:15:21 【问题描述】:这是我的代码,在该行中,我对造成此问题的return
进行了评论。
from pynput import mouse
def on_move(m_x, m_y):
print('Pointer moved to 0'.format((m_x, m_y)))
def on_click(m_x, m_y, button, pressed):
#print('0 at 1'.format('Pressed' if pressed else 'Released',(m_x, m_y)))
if(pressed):
print("Pressed")
else:
print("( x = "+ str(m_x) + ", y = " + str(m_y) + " )")
return(m_x, m_y) #this is the return
if not pressed:
# Stop listener
return False
def on_scroll(m_x, m_y, dm_x, dm_y):
print('Scrolled 0 at 1'.format(
'down' if dy < 0 else 'up',
(m_x, m_y)))
# Collect events until released
with mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
listener.join()
# ...or, in a non-blocking fashion:
listener = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll)
A_coord_x, A_coord_y = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll)
#listener.start()
print (A_coord_x)
print (A_coord_y)
我唯一想要的是,在单击后,坐标将保存在变量 A_coord_x
和 A_coord_y
中
【问题讨论】:
【参考方案1】:on_click()
是一个事件处理程序,您不能从中返回值,return False 语句只会停止侦听器。只需从处理程序中调用 set_coordinates(x,y) 函数,您就应该得到您想要的结果。
也许还可以看看documentation,有一个关于如何使用 mouse.listener 的示例
【讨论】:
【参考方案2】:这是给你的答案。这将释放listener
并为您提供A_coord_x
和A_coord_y
中的坐标
from pynput.mouse import Listener
A_coord_x, A_coord_y = 0, 0
def on_click(x, y, button, pressed):
global A_coord_x, A_coord_y
if pressed:
A_coord_x, A_coord_y = x, y
print('0 at 1'.format(
'Pressed' if pressed else 'Released',
(x, y)))
return x,y
if not pressed:
# Stop listener
return False
with Listener(on_click=on_click) as listener:
coords = listener.join()
print ('X coordinates :',A_coord_x)
print ('Y coordinates :',A_coord_y)
输出:
Pressed at (1211, 400)
X coordinates : 1211
Y coordinates : 400
【讨论】:
当然请@ElectrisikVocal以上是关于为啥当我让这个函数返回它的值时,函数会无限重复自己?的主要内容,如果未能解决你的问题,请参考以下文章