使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动
使用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()
相关文章:
使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动
使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动 Turtle库是Python标准库的一部分,它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”(Turtle)对象在屏幕上移动…...
人工智能入门是先看西瓜书还是先看花书?
在人工智能入门时,关于先看《机器学习》(西瓜书)还是先看《深度学习》(花书)的问题,实际上取决于个人的学习目标和背景。 《机器学习》(西瓜书)由周志华教授撰写,是一本…...
winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭
winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭 protected override void WndProc(ref Message m){#region 处理点击窗体标题栏放大缩小问题,禁用点击窗体标题栏放大缩小//logger.Info($&…...
进程内存转储工具|内存镜像提取-取证工具
1.内存转储,内存转储(Memory Dump)是将计算机的物理内存(RAM)内容复制到一个文件中的过程,这个文件通常被称为“内存转储文件”或“核心转储文件”(Core Dump),内存转储的主要目的是…...
数据结构day5:单向循环链表 代码作业
一、loopLink.h #ifndef __LOOPLINK_H__ #define __LOOPLINK_H__#include <stdio.h> #include <stdlib.h>typedef int DataType;typedef struct node {union{int len;DataType data;};struct node* next; }loopLink, *loopLinkPtr;//创建 loopLinkPtr create();//…...
(OCPP服务器)SteVe编译搭建全过程
注意:建议使用3.6.0,我升级到3.7.1,并没有多什么新功能,反而电表的实时数据只能看到累计电能了,我回退了就正常,数据库是兼容的,java版本换位java11,其他不变就好 背景:…...
Mybatis分页插件的使用问题记录
项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为,通过传入的条件…...
36. Three.js案例-创建带光照和阴影的球体与平面
36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器,用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…...
CentOS 7 安装、测试和部署FastDFS
目录 FastDFS环境搭建 安装 libfastcommon 库 安装FastDFS 查看编译后的文件 FastDFS配置 FastDFS启动 启动tracker服务 启动storage服务 查看storage是否已经注册到了tracker下 查看存储文件的目录 FastDFS重启 FastDFS关闭 使用fdfs_test进行测试 修改client.co…...
全志H618 Android12修改doucmentsui选中图片资源详情信息
背景: 由于当前的文件管理器在我们的产品定义当中,某些界面有改动的需求,所以需要在Android12 rom中进行定制以符合当前产品定义。 需求: 进入file文件管理器后,点击选中图片资源,选中功能按钮,获取信息,不显示“调试信息(仅开发者)”;现状是,获取信息,显示“调试信…...
【083】基于51单片机智能烘手器【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统LCD1602液晶显示DS18B20温度传感器TCRT5000红外感应传感器AT24C02存储芯片风扇加热片继电器LED灯按键设置。 1、设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片; 2、系统采用DS18B20温度传感器感应当前环…...
uniApp使用腾讯地图提示未添加maps模块
uniApp使用腾讯地图,打包提示未添加maps模块解决方案 这是报错信息,在标准基座运行的时候是没问题的,但是打包后会提示未添加,可以通过在mainfest里面把地图插件上腾讯地图的key更换高德地图的key,定位服务可以继续用腾…...
未来趋势系列 篇五:自主可控科技题材解析和股票梳理
文章目录 系列文章自主可控科技题材分析国产算力信创(信息技术应用创新)华为鸿蒙军工信息化半导体芯片卫星互联网工业软件股票梳理系列文章 未来趋势系列 篇一:AI题材解析和股票梳理 未来趋势系列 篇一(加更):AI医疗题材解析和股票梳理 未来趋势系列 篇二:HBM题材解析和…...
Springboot 学习 之 logback-spring.xml 日志压缩 .tmp 临时文件问题
文章目录 前言功能简述1. 自定义日志文件名2. 归档规则 && 压缩2.1. 归档配置2.2. 归档压缩2.3. 日志格式 && 编码 现象原因解决办法 前言 在 Springboot 应用中,默认使用 logback-spring.xml 配置日志相关 功能简述 1. 自定义日志文件名 <fi…...
maven-resources-production:ratel-fast: java.lang.IndexOutOfBoundsException
Maven生产环境中遇到java.lang.IndexOutOfBoundsException的问题,尝试了重启电脑、重启IDEA等常规方法无效,最终通过直接重建工程解决了问题。 Rebuild Project 再启动OK...
K8s docker-compose的入门
一、Docker Compose 简介 什么是 Docker Compose? 用于定义和运行多容器 Docker 应用的工具。Docker Compose 的主要功能 使用 docker-compose.yml 文件定义服务。一键启动和管理多容器环境。安装与环境准备 安装 Docker 和 Docker Compose。检查版本:d…...
去雾Cycle-GAN损失函数
文章目录 GAN-LossIdentity-LossDP-lossCycle-Loss G和F都是生成器 G是hazy → \to → gt F是gt → \to → hazy D y D_y Dy判别无雾图是真实还是生成的? D x D_x Dx判别有雾图是真实还是生成的? GAN-Loss 在 DAM-CCGAN 中存在两个判别器 D x D_x D…...
word实现两栏格式公式居中,编号右对齐
1、确定分栏的宽度 选定一段文字 点击分栏:如本文的宽度为22.08字符 2、将公式设置为 两端对齐,首行无缩进。 将光标放在 公式前面 点击 格式-->段落-->制表位 在“制表位位置”输入-->11.04字符(22.08/211.04字符)&…...
vtie项目中使用到了TailwindCSS,如何打包成一个单独的CSS文件(优化、压缩)
在不依赖 Vite 或其他构建工具的情况下,使用 TailwindCSS CLI 快速生成独立的 CSS 文件是一种简单高效的方法,适合需要纯样式文件的场景。 这个项目中,使用到了tailwindCss, 需要把里面的样式打包出来,给其他项目用。 使用命令生…...
shell脚本案例
脚本一:打印当前系统登录用户列表 #!/bin/bash # 使用 who 命令获取当前登录用户信息并输出 who解释:who 命令用于显示当前登录系统的用户信息,包括用户名、登录终端、登录时间等。此脚本直接执行 who 命令并将结果输出到终端。 脚本二&…...
Steam创意工坊下载终极指南:无需Steam账号也能畅玩海量模组
Steam创意工坊下载终极指南:无需Steam账号也能畅玩海量模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL WorkshopDL是一款跨平台Steam创意工坊下载工具ÿ…...
AI应用哪家性价比高
在当前数字化转型浪潮中,企业纷纷寻求AI应用来降本增效,但面对市场上琳琅满目的产品,“AI应用哪家性价比高”成为决策者最纠结的问题。性价比并非单纯的价格对比,而是功能、效率、易用性与实际价值的综合考量。本文将从行业痛点出…...
Rust 核心理论: 高并发与异步(三)
写在前面 Rust 凭借其独特的所有权机制和借用检查器,在不依赖垃圾回收的前提下,实现了内存安全与线程安全的编译期保证。 然而,对于许多从 C/C、Java、Python 等背景转入 Rust 的开发者而言,所有权、生命周期、借用规则、内部可变…...
ElevenLabs印地文语音质量崩塌真相(印地语TTS失效深度溯源):7类发音错误+5个未公开参数修复方案
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs印地文语音质量崩塌的全局现象与影响评估 近期,ElevenLabs平台在印地语(Hindi)TTS合成任务中出现系统性语音质量退化,表现为音素错读、韵律断裂…...
3分钟快速上手:AutoCAD字体管理终极方案FontCenter完整教程
3分钟快速上手:AutoCAD字体管理终极方案FontCenter完整教程 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 还在为AutoCAD字体缺失问题烦恼吗?每次打开同事的图纸都遇到文字乱码、…...
如何快速实现无人机合规飞行:基于ESP32的完整远程识别解决方案
如何快速实现无人机合规飞行:基于ESP32的完整远程识别解决方案 【免费下载链接】ArduRemoteID RemoteID support using OpenDroneID 项目地址: https://gitcode.com/gh_mirrors/ar/ArduRemoteID 在FAA和欧盟无人机法规日益严格的背景下,远程识别已…...
B站成分检测器:5分钟快速上手终极指南,智能识别评论区用户真实身份
B站成分检测器:5分钟快速上手终极指南,智能识别评论区用户真实身份 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分,支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-c…...
【架构实战】日志体系ELK:集中化日志管理实践
【架构实战】日志体系ELK:集中化日志管理实践字数统计:约3500字一、从一个深夜告警说起 2024年双十一前的凌晨两点,我接到运维的电话:“支付服务挂了,用户投诉量飙升。” 我揉着眼睛打开电脑,第一件事就是登…...
UV-UI框架终极指南:如何快速构建跨平台应用
UV-UI框架终极指南:如何快速构建跨平台应用 【免费下载链接】uv-ui uv-ui 破釜沉舟之兼容vue32、app、h5、小程序等多端基于uni-app和uView2.x的生态框架,支持单独导入,开箱即用,利剑出击。 项目地址: https://gitcode.com/gh_m…...
淘金币自动化脚本终极指南:每天节省20分钟,让淘宝任务自动完成
淘金币自动化脚本终极指南:每天节省20分钟,让淘宝任务自动完成 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta…...
