【问题标题】: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_xA_coord_y

【问题讨论】:

    标签: python python-3.x function methods return


    【解决方案1】:

    on_click() 是一个事件处理程序,您不能从中返回值,return False 语句只会停止侦听器。只需从处理程序中调用 set_coordinates(x,y) 函数,您就应该得到您想要的结果。

    也许还可以看看documentation,有一个关于如何使用 mouse.listener 的示例

    【讨论】:

      【解决方案2】:

      这是给你的答案。这将释放listener 并为您提供A_coord_xA_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
      猜你喜欢
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2022-08-13
      • 1970-01-01
      • 2021-12-25
      • 2020-06-17
      • 2023-01-01
      • 1970-01-01
      相关资源
      最近更新 更多