鼠标与键盘交互设计

自学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  追逐鼠标的红点

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值