使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

news/2024/12/26 16:51:12/

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

Turtle库是Python标准库的一部分,它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”(Turtle)对象在屏幕上移动和绘制图形,支持诸如前进、后退、左转、右转等操作。此外,Turtle还支持设置颜色等功能。

现在,使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制时,小海龟并沿路径移动。


源码如下:

# 鼠标左键绘制路径,用鼠标右键结束绘制时,小海龟并沿路径移动。
import turtle
import math# 全局变量
screen = None
draw_turtle = None
move_turtle = None
path = []def setup_screen():global screen, draw_turtle, move_turtle# 设置屏幕screen = turtle.Screen()screen.title("海龟跟随鼠标绘制路径")screen.setup(width=800, height=600)# 创建绘图海龟draw_turtle = turtle.Turtle()draw_turtle.hideturtle()draw_turtle.speed(0)# 创建移动海龟move_turtle = turtle.Turtle()move_turtle.shape('turtle')move_turtle.color('red')#move_turtle.penup()#move_turtle.hideturtle()def start_drawing(x, y):global  path# 开始绘制路径path = [(x, y)]# 准备绘图海龟draw_turtle.penup()draw_turtle.goto(x, y)draw_turtle.pendown()def continue_drawing(x, y):global path# 继续绘制路径draw_turtle.goto(x, y)path.append((x, y))def calculate_angle(index):# 计算海龟前进角度if index + 1 < len(path):current = path[index]next_point = path[index + 1]dx = next_point[0] - current[0]dy = next_point[1] - current[1]return math.degrees(math.atan2(dy, dx))return 0def move_along_path(index=0):# 沿路径移动if index < len(path) - 1:current = path[index]next_point = path[index + 1]# 计算距离和角度distance = math.sqrt((next_point[0] - current[0])**2 + (next_point[1] - current[1])**2)# 设置海龟朝向angle = calculate_angle(index)move_turtle.setheading(angle)# 移动move_turtle.goto(next_point[0], next_point[1])# 递归移动到下一个点screen.ontimer(lambda: move_along_path(index + 1), 50  # 移动间隔时间)else:# 路径结束move_turtle.penup()def finish_drawing(x, y):    # 显示并移动海龟if len(path) > 1:move_turtle.showturtle()start_x, start_y = path[0]move_turtle.goto(start_x, start_y)move_turtle.pendown()move_turtle.setheading(calculate_angle(0))# 开始沿路径移动move_along_path()def main():# 初始化屏幕和海龟setup_screen()# 绑定鼠标事件screen.onscreenclick(start_drawing, 1)  # 左键开始绘制screen.onscreenclick(continue_drawing, 1)  # 左键继续绘制screen.onscreenclick(finish_drawing, 3)  # 右键结束绘制screen.listen()# 启动主循环turtle.done()# 运行程序
if __name__ == "__main__":main()

附、Python的turtle模块的事件处理 https://blog.csdn.net/cnds123/article/details/143509310


http://www.ppmy.cn/news/1558310.html

相关文章

解决集群Elasticsearch 未授权访问漏洞

1、ES集群配置 首先至少是三个节点 2、生成证书&#xff08;后面要用&#xff09; cd /home/elasticsearch-7.4.2/bin ./elasticsearch-certutil cert 回车&#xff0c;空密码&#xff08;可以输入密码&#xff09;&#xff0c;回车 3、将elastic-certificates.p12 复制到三…

什么是微服务、微服务如何实现Eureka,网关是什么,nacos是什么

目录 1、了解微服务 1、微服务的由来 2、为什么需要微服务 3、微服务与单体架构区别 4、微服务本质 5、什么样的项目适合微服务 6、微服务开发框架 2、微服务实现Eureka 1、创建普通springboot项目 2、创建子模块 3、使用Eureka注册中心 4、创建消费者 3.网关 1、…

排序算法 (插入,选择,冒泡,希尔,快速,归并,堆排序)

排序:经常在算法题中作为一个前置操作,为了之后的贪心or else做个铺垫,虽然我们经常都只是调用个sort,但是了解一些排序算法可以扩充下知识库 排序的分类: 从存储设备角度&#xff1a; ✓ 内排序&#xff1a;在排序过程中所有数据元素都在内存中&#xff1b; ✓ 外排序&a…

hive常用函数有哪些

Hive是一个基于Hadoop的数据仓库工具&#xff0c;它提供了类似于SQL的接口&#xff0c;用于数据查询和分析。Hive提供了许多内置函数&#xff0c;这些函数可以分为几种类型&#xff0c;包括&#xff1a; • 字符串函数&#xff1a;用于处理字符串数据。 • concat()&#xff1…

记录一个SVR学习

1、为什么使用jupter来做数据预测&#xff1f;而不是传统pycharm编辑器 1、Jupyter Notebook 通过anaconda统一管理环境&#xff0c;可以运行python、R、Sql等数据分析常用语言。 2、做到交互式运行&#xff0c;可以逐步运行代码块&#xff0c;实时查看结果&#xff0c;便于调…

webpakc介绍

介绍 因为不确定打出的前端包所访问的后端IP&#xff0c;需要对项目中IP配置文件单独拿出来&#xff0c;方便运维部署的时候对IP做修改。 因此&#xff0c;需要用webpack单独打包指定文件。 CommonsChunkPlugin module.exports {entry: {app: APP_FILE // 入口文件},outpu…

Python实现机器学习驱动的智能医疗预测模型系统的示例代码框架

以下是一个使用Python实现机器学习驱动的智能医疗预测模型系统的示例代码框架。这个框架涵盖了数据收集&#xff08;爬虫&#xff09;、数据清洗和预处理、模型构建&#xff08;决策树和神经网络&#xff09;以及模型评估的主要步骤。 1. 数据收集&#xff08;爬虫&#xff09…

解决 Docker 中 DataLoader 多进程错误:共享内存不足

一、问题描述&#xff1a; 在容器化环境&#xff08;如 Docker&#xff09;中使用深度学习框架进行训练时&#xff0c;通常会使用 PyTorch 的 DataLoader 来加载数据。在使用 DataLoader 的多进程数据加载时&#xff0c;当 num_workers > 0&#xff0c;即启用多个工作进程并…