line 16, in <module> pyautogui.on_click(click_and_record_position) AttributeError: module 'pyautogui' has no attribute 'on_click'
时间: 2023-12-05 11:04:49 浏览: 179
抱歉,之前提供的代码在最新版本的PyAutoGUI中可能已经不适用。以下是更新后的代码,使用pynput库来实现点击事件的监听:
```python
from pynput import mouse
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
import numpy as np
# 存储鼠标点击位置的列表
points = []
def on_click(x, y, button, pressed):
# 当鼠标左键按下时记录鼠标位置
if button == mouse.Button.left and pressed:
points.append((x, y))
# 创建鼠标监听器
listener = mouse.Listener(on_click=on_click)
listener.start()
# 运行程序并点击鼠标左键生成点
print("请点击鼠标左键生成点,按'q'键退出")
while True:
if input() == 'q':
break
# 停止鼠标监听器
listener.stop()
# 获取鼠标坐标值
x = [point[0] for point in points]
y = [point[1] for point in points]
# 生成贝塞尔曲线的插值函数
t = np.arange(len(points))
f_x = interp1d(t, x, kind='cubic')
f_y = interp1d(t, y, kind='cubic')
# 绘制贝塞尔曲线
t_new = np.linspace(0, len(points)-1, 1000)
x_new = f_x(t_new)
y_new = f_y(t_new)
plt.plot(x_new, y_new)
plt.scatter(x, y, color='red')
plt.show()
```
请确保你已经安装了pynput库,可以使用以下命令进行安装:
```
pip install pynput
```
运行这段代码后,点击鼠标左键生成点,当你按下键盘上的 'q' 键时程序会退出,并绘制出贝塞尔曲线和点击的点。
阅读全文