鼠标与键盘交互设计

news2024/11/19 9:55:59

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

在海龟绘图中,也支持与鼠标或键盘的交互操作。它提供了监听键盘按键事件、鼠标事件以及定时器等方法,下面分别进行介绍。

1键盘事件

海龟绘图中提供了对键盘事件进行监听的方法。在执行键盘事件监听时,需要调用listen()方法。

该方法用于让海龟屏幕(TurtleScreen)可以获得焦点,为接收键盘事件做好准备。调用listen()方法的代码如下:

turtle.listen()

海龟绘图中的键盘事件主要有以下两个:

l   onkey()|onkeyrelease() :当按键被按下并释放时发生语法如下:

turtle.onkey(fun, key)

或者

turtle.onkeyrelease(fun, key)

参数说明:

l  fun :必选参数,表示一个无参数的函数,用于指定当按下并释放指定按键时,执行的函数。也可以指定为 None,表示什么都不做。

l  key :必选参数,表示被按下的键对应的字符串, 如 "a" 或"space"。当指定"a"时,表示当按下并释放<a>键时执行fun参数所指定的函数。

例如,当按下并释放键盘上的<w>键时,海龟向上移动100像素,代码如下:

import turtle # 导入海龟绘图模块

def funmove():

turtle.left(90) # 逆时针旋转90度

turtle.forward(100) # 向前移动100像素

turtle.listen() # 让海龟屏幕(TurtleScreen)获得焦点

turtle.onkey(funmove,'w') # 按下并释放<w>键

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

运行上面的代码,当按下并释放键盘上的<w>键时,屏幕上的向右箭头将逆时针旋转90度,并且快速向上移动100像素并画线。

l  onkeypress() :当按键被按下(不释放)时发生语法如下:

turtle.onkeypress(fun, key=None)

参数说明:

l  fun :表示一个无参数的函数,用于指定当按下(不释放)指定按键时,执行的函数。也可以指定为 None,表示什么都不做。

l  key :可选参数,表示被按下的键对应的字符串, 如 "a"或"space"。当指定"a"时,表示当按下(不释放)<a>键时执行fun参数所指定函数。如果未指定,则移除事件绑定。

例如,当一直按下(不释放)键盘上的<↑>键时,让海龟一直向前移动,释放按键即停止移动,代码如下:

import turtle # 导入海龟绘图模块

def funmove():

turtle.forward(1) # 向前移动1像素

turtle.listen() # 让海龟屏幕(TurtleScreen)获得焦点

turtle.onkeypress(funmove,'Up') # 按下向上方向键

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

运行上面的代码,当一直按下(不释放)键盘上的<↑>键时,海龟将一直向前移动。

2  鼠标事件

在海龟绘图中提供了对鼠标事件进行监听的方法。海龟绘图中的鼠标事件主要有以下3个:

l  onclick()|onscreenclick() :表示处理鼠标点击屏幕事件语法如下:

turtle.getscreen().onclick(fun, btn=1, add=None)

或者

turtle.onscreenclick(fun, btn=1, add=None)

参数说明:

l  fun :表示一个函数,用于指定当鼠标按键被按下时执行的函数。该函数调用时将传入两个参数,表示在屏幕上点击位置的坐标,所以指定的函数需要带有两个参数。

l  btn :鼠标按键编号,默认值为1(鼠标左键)、2(鼠标中键,即按下滑轮)、3(鼠标右键)。

l  add :一个布尔值,表示是否添加新绑定。如果为True,则添加一个新绑定;否则将取代先前的绑定。

说明:如果将fun 参数设置为None,则将移除事件绑定。

实例15.8   获取鼠标的点击位置       

当使用鼠标左键点击屏幕时,显示点击位置的坐标,代码如下:

import turtle # 导入海龟绘图模块

def funclick(x,y):

turtle.clear() # 清空屏幕

turtle.write((x,y),font=('宋体',15,'normal')) # 输出坐标的位置

turtle.onscreenclick(funclick,1) # 单击鼠标左键

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

运行上面的代码,单击屏幕将显示出单击位置的坐标,如图15.46所示。

图15.46  显示单击位置的坐标

onclick()方法也可以作为海龟对象的方法,例如,下面的代码将实现在单击屏幕中的海龟时,显示当前的坐标位置:

import turtle # 导入海龟绘图模块

t = turtle.Turtle() # 创建海龟对象

t.shape('turtle') # 设置画笔形状

def funclick(x,y):

turtle.clear() # 清空屏幕

turtle.write((x,y),font=('宋体',15,'normal')) # 显示坐标位置

t.onclick(funclick,1) # 单击海龟

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

运行上面的代码,只在单击屏幕上的小海龟时,才会显示当前的坐标位置。

l   onrelease() :该方法为海龟对象的方法,表示处理鼠标释放事件语法如下:

turtle.onrelease(fun, btn=1, add=None)

参数说明:

l  fun :表示一个事件触发时执行的函数。该函数调用时将传入两个参数表示释放鼠标按键时鼠标位置的坐标,所以指定的函数需要带有两个参数。

l  btn :鼠标按键编号,默认值为1(鼠标左键)、2(鼠标中键,即按下滑轮)、3(鼠标右键)。

l  add :一个布尔值,表示是否添加新绑定。如果为True,则添加一个新绑定;否则将取代先前的绑定。

例如,创建一个海龟对象,当用户在海龟对象上按下鼠标左键并释放时显示释放时鼠标位置的坐标,代码如下:

import turtle # 导入海龟绘图模块

t = turtle.Turtle() # 创建海龟对象

t.shape('turtle') # 指定画笔形状

def fun(x,y):

turtle.clear() # 清空屏幕

turtle.write((x,y),font=('宋体',15,'normal')) # 显示坐标的位置

t.onrelease(fun,1) # 处理鼠标释放事件

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

l  ondrag() :表示处理鼠标拖动事件语法如下:

turtle.ondrag(fun, btn=1, add=None)

参数说明:

l  fun :表示按住鼠标左键并拖动时执行的函数。该函数调用时将传入两个参数表示释放鼠标按键时鼠标位置的坐标,所以指定的函数需要带有两个参数。

l  btn :鼠标按键编号,默认值为1(鼠标左键)、2(鼠标中键,即按下滑轮)、3(鼠标右键)。

l  add :一个布尔值,表示是否添加新绑定。如果为True则,则添加一个新绑定;否则将取代先前的绑定。

说明:当画笔为落笔状态时,在海龟对象上单击并拖动海龟可在屏幕上手绘线条。

例如,创建一个海龟对象,并且为该对象添加拖动事件,实现拖动屏幕中的海龟时,在屏幕上手绘线条,代码如下:

import turtle # 导入海龟绘图模块

t = turtle.Turtle() # 创建海龟对象

t.shape('turtle') # 设置画笔形状

334

Python 从入门到实践

t.color('blue') # 设置画笔颜色

turtle.listen() # 让海龟屏幕(TurtleScreen)获得焦点

def fun(x,y):

t.pendown() # 落笔

t.goto(x,y) # 移动到指定坐标

t.ondrag(fun,1) # 处理拖动事件

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

运行上面的代码,拖动海龟光标绘制想要的图案,效果如图15.47所示。

图15.47  在屏幕上手绘线条

3计算器

在海龟绘图中,提供了ontimer()方法来实现一个计时器,用于当达到指定时间时,执行一个操作。

语法如下:

turtle.ontimer(fun, t=0)

参数说明:

l  fun :无参数的函数,当计时器到到指定时间时执行。

l  t :指定一个大于或等于0的数值,表示多长时间(单位为毫秒)后触发fun指定的函数。

例如,安装一个计时器,在300毫秒后调用画正方形的函数,代码如下:

import turtle # 导入海龟绘图模块

def fun(): # 绘制正方形

for i in range(4):

turtle.forward(100)

turtle.left(90)

turtle.getscreen().ontimer(fun, 300) # 设置计时器

turtle.done() # 海龟绘图程序的结束语句(开始主循环)

运行程序,等待300毫秒后,将绘制一个正方形。

动手试一试6

 任务一:通过←、→、↑、↓键控制海龟的移动

在游戏中,通过按下键盘上的←、→、↑、↓键来控制精灵移动。本任务要求实现按下←、→、↑、↓键控制海龟移动,例如,按下↑键海龟头朝上同时一直向前移动,如图15.48所示,按下←键海龟头朝左同时一直向左移动,如图15.49所示。

  

图15.48  按下↑键

 图15.49  按下←键

任务二:追逐鼠标的红点

本任务要求编写一段Python代码,将画笔形状设置为圆点,画笔颜色为红色,然后实现单击屏幕时光标移动到点击位置,同时在原位置和新位置之间画一条线,再次单击,则继续画线,如图15.50所示。当单击鼠标右键时清空屏幕,光标位置不动。

图15.50  追逐鼠标的红点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1863680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python013】pyinstaller打包PDF提取脚本为exe工具

1.在日常工作和学习中&#xff0c;遇到类似问题处理场景&#xff0c;如pdf文件核心内容截取&#xff0c;这里将文件打包成exe可执行文件&#xff0c;实现功能简便使用。 2.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 3.欢迎点赞、关…

视频文件太大怎么压缩?十大视频压缩软件可解决您的问题

您是否已经受够了无法上传视频文件&#xff0c;因为它们太大了&#xff1f;如果您正在积极寻找免费下载的视频压缩软件&#xff0c;下面概述了目前在线提供的 10 个功能更强大的软件。 我们建议您在决定下载之前先通读一下这个简短的介绍。我们不希望您随意点击一个选项&#…

STM32定时器篇——通用定时器的使用(定时中断,PWM输出)

一、通用定时器的类型以及应用功能&#xff1a; 通用定时器有&#xff1a;TIM2、TIM3、TIM4、TIM5&#xff0c;其总线挂载于APB1上&#xff0c;且有基本定时器的所有功能&#xff08;定时中断、主模式触发ADC&#xff09;&#xff0c;并额外具有内外时钟源选择&#xff0c;输入…

学习笔记——动态路由——RIP(Rip 基本配置)

五、Rip 基本配置 主类网络(有类&#xff0c;major-net)&#xff1a; 使用自然掩码的网段 例如&#xff1a; 12.1.1.0/24--->12.0.0.0 192.168.1.0/24--->192.168.1.0 172.16.1.0/24--->172.16.0.0 基本配置&#xff1a; 济南总局&#xff1a; IP:192.168.1.1 /…

如何提高pcdn技术的传输效率?

提高PCDN技术的传输效率是一个复杂且多层面的任务&#xff0c;涉及多个关键策略和方法的结合。以下是一些具体的建议和措施&#xff0c;有助于提升PCDN技术的传输效率&#xff1a; 一&#xff0e;优化缓存策略&#xff1a; 精准定位热点内容&#xff0c;优先将这部分内容缓存…

Python-批量日期数据格式化处理

背景 用于批量格式化数据&#xff0c;背景就是领导给我我一张下面这样的表格&#xff0c;其中启用日期是五花八门的格式&#xff0c;大概有几万行&#xff0c;需要把启用日期一列统一格式化为“YYYY-MM-DD”的格式&#xff0c;显然&#xff0c;针对这种格式不统一的数据&#…

GPT-4搞不定的图推理,港科大7B模型搞定

大模型执行图推理任务&#xff0c;我们是希望大模型仅仅给出结果&#xff0c;还是在给出准确答案的同时&#xff0c;输出详细的推理过程&#xff1f; 先来看GPT-4的表现&#xff1a; 给出了一个非常简短且错误的答案&#xff08;判断该图中没有环&#xff09;&#xff0c;这可…

【扩散模型(二)】IP-Adapter 从条件分支的视角,快速理解相关的可控生成研究

系列文章目录 【扩散模型&#xff08;一&#xff09;】中介绍了 Stable Diffusion 可以被理解为重建分支&#xff08;reconstruction branch&#xff09;和条件分支&#xff08;condition branch&#xff09;本文将从该视角快速理解 IP-Adapter 以及相关可控生成研究。 文章目…

linux下OpenSSL升级到1.1以上版本

要将CentOS 7上的OpenSSL升级到1.1以上版本&#xff0c;您需要遵循以下步骤。请注意&#xff0c;这些步骤可能需要一些系统管理经验&#xff0c;因为您将从源代码编译和安装OpenSSL。 1. 更新系统软件包 首先&#xff0c;确保您的系统软件包是最新的。使用以下命令更新所有软…

智慧校园-毕业管理系统总体概述

在当今教育信息化的浪潮中&#xff0c;智慧校园毕业管理系统脱颖而出&#xff0c;它作为一项综合性的数字平台&#xff0c;全面覆盖了从毕业资格审查到学位授予的每一个关键步骤&#xff0c;旨在通过智能化手段&#xff0c;为高校的毕业管理工作带来革命性的变革。毕业管理系统…

下一代广域网技术2:SRv6

2.SRv6 SR架构设计之初&#xff0c;就为SR数据平面设计了两种实现方式&#xff1a;一种是SR-MPLS&#xff0c;其重用了MPLS数据平面&#xff0c;可以在现有IP/MPLS网络上增量部署&#xff1b;另一种是SRv6&#xff0c;使用IPv6数据平面&#xff0c;基于IPv6路由扩展头进行扩展…

第七届IAIC(成都)国际医美产业大会在蓉召开

四川省人民医院新丽美获“中国整形美容协会医疗救助与修复基金-成都市整形修复定点医院”“‘放心美 医无忧’全过程保障示范医院”两块授牌 2024年6月24日&#xff0c;第七届IAIC&#xff08;成都&#xff09;国际医美产业大会暨“医美之都”高峰会议省医院新丽美整形修复基地…

CesiumJS加载天地图数据后,可以实现什么效果?

说起地图&#xff0c;大家耳熟能详的百度地图、高德地图、腾讯地图等&#xff0c;由于授权的原因&#xff0c;使用起来心惊胆战的&#xff0c;而天地图就没有这方面的困扰&#xff0c;本文介绍下如何在cesium中时候用天地图数据&#xff0c;已经能够实现哪些交互效果。 一、关…

无限制数字(仅仅int类型)的大小的自然排序算法

直接上代码&#xff1a; #include <iostream> #include <vector> #include <string> #include <algorithm> #include <cctype>// Function to compare two strings in a natural way bool naturalCompare(const std::string& a, const std:…

录制视频怎么操作?手把手教会你!

在这个互联网科技高速发展的时代&#xff0c;录制视频已经成为了人们生活中一个不可或缺的技能。无论是记录游戏精彩瞬间、制作教程、分享生活趣事&#xff0c;还是进行在线教学&#xff0c;录制视频都是一种非常直观有效的方式。可是录制视频怎么操作呢&#xff1f;本文将介绍…

Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南

系列文章目录 Vue核心指令解析&#xff1a;探索MVVM与数据操作之美 文章目录 系列文章目录前言一、Vue生命周期是什么&#xff1f;二、钩子函数讲解1. beforeCreate( 创建前 )2. created ( 创建后 &#xff09;3. beforeMount&#xff08;挂载前&#xff09;4. mounted&#xf…

第11章 规划过程组(制订项目管理计划)

第11章 规划过程组&#xff08;一&#xff09;11.1制订项目管理计划&#xff0c;在第三本版教材第368~372页&#xff1b; 文字图片音频方式 视频16 第一个知识点&#xff1a;主要输入 1、事业环境因素 政府或行业标准(如产品标准、质量标准、安全标准和工艺标准) 法律法规要求…

乐乐趣《牛津话科学 侃侃闪闪的科学大冒险》新书分享会圆满落幕

2024年6月21日&#xff0c;乐乐趣《牛津话科学 侃侃闪闪的科学大冒险》新书分享会在BIBF绘本展活动区举行。牛津大学出版社中国区首席内容官孙赫男、北京师范大学教育学部副教授张进宝、中国美协漫画艺术委员会秘书长王立军、荣信文化副总经理兼乐乐趣总编辑孙肇志围绕孩子的科…

【Python机器学习】聚类算法的对比与评估——在人脸数据集上比较算法

数据探查&#xff1a; 我们将k均值、DBSCAN和凝聚聚类算法应用于Wild数据集中的Labeled Faces&#xff0c;并查看它们是否找到了有趣的结构。我们将使用数据的特征脸表示&#xff0c;它由包含100个成分的PCA(whitenTrue)生成&#xff1a; peoplefetch_lfw_people(data_home &…

ChatGPT API技术教程OpenAI APIKey在线对接-Chat Completion对象

表示模型根据提供的输入返回的聊天完成响应。 {"id": "chatcmpl-123","object": "chat.completion","created": 1677652288,"model": "gpt-3.5-turbo-0125","system_fingerprint": "fp…