这段程序报错line 22, in <module> pyautogui.on_click(click_and_record_position) AttributeError: module 'pyautogui' has no attribute 'on_click'
时间: 2023-12-05 20:04:49 浏览: 154
抱歉,看起来PyAutoGUI库的最新版本已经移除了`on_click`函数。为了修复这个问题,我们可以使用`mouse.Listener`来替代`pyautogui.on_click`。
下面是更新后的代码:
```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`库中的`mouse.Listener`来监听鼠标点击事件,并记录鼠标点击位置。然后使用scipy.interpolate库中的interp1d函数来生成贝塞尔曲线的插值函数。最后使用matplotlib库来绘制贝塞尔曲线和点击的点。
请注意,你需要先安装`pynput`库,可以使用以下命令进行安装:
```
pip install pynput
```
运行这段代码后,点击鼠标左键生成点,当你按下键盘上的 'q' 键时程序会退出,并绘制出贝塞尔曲线和点击的点。
阅读全文