当前课程知识点:Python 交互式程序设计导论 > 第5周 > A 课程视频(鼠标输入、列表进阶) > 鼠标输入
返回《Python 交互式程序设计导论》慕课在线视频课程列表
Hi 大家好,欢迎大家回到python课堂
今天,我讲给大家介绍鼠标的使用,首先会给大家讲解, 如何接受鼠标的输入,
再给大家讲解,如何使用鼠标来控制画布上的对象, 好,下面开始我们今天的内容,
我们已经给出了一个程序模板,我们先来运行一下,
那么我们得到了一块儿画布,那么上面什么都没有,
那么我们的要求是,首先在我们的画布正中间画一个小圆,
好,那么,绘制图形,我们要定义绘制函数,所以我们给出一个定义,
定义draw函数,那么它的参数canvas,大家还是记得这个画圆的语法, canvas.draw_circel,
对于圆来说我们有这样几个参数,首先是圆心,我们已经给出了一个 全局变量圆心,我们把它拷贝过来就可以了,
然后是半径,我们这里也给出来了BALL_RADIUS,我们也把它拷贝过来,
那么第三个参数是,边界的宽度,我们给一个2,
然后是边界的颜色,我们给一个白色,
小球内部的填充色,也就是ball_color我们也给出了,
我们粘贴过来就可以了,
好了这是我们的绘制函数,有了绘制函数以后,我们要对它进行一个注册,
frame.set_draw_handle我们的绘制函数的函数名, 应该是没有问题了,我们来运行一下。
画布的正中,得到一个红色小球
下面那,我对这个已有的程序进行第一次修改
我的目的是,当我鼠标在画布上点击的时候
这个小球会随着我的点击,而改变它的位置
我们来想一下,那么当我们的鼠标点击
我们会得到的其实是,鼠标点击下去后的坐标
那么我们希望是把这个坐标呢传递给我们小球的中心坐标
我们定义一个鼠标点击这样一个事件响应函数
我们把它命名为click
我们说是让,ball_center等于我们鼠标点击后得到的这个坐标
那么在这里,我们有两点要强调,第一
那么这个pos呢,是一个元组,也就是圆括号
而我们的ball_center呢,我们在这给的是一个列表
那么在我们的图形绘制当中,不管这个ball_center是以列表的形式给出的
还是以元组的形式给出的,都可以进行绘制
那么元组和列表的区别就是
元组呢是一个,不可变的一种数据类型,而列表呢是可变的数据类型
那么在引用的时候,我们在对元组操作肯能会引起一些不必要的麻烦
所以我们在这对它进行一个强制类型转换,将它转换成列表形式
那么我们在使用的时候,肯能就不会有一些不必要的麻烦
第二,我们的这个ball_center呢是一个全局变量
你要对它进行修改,你就要对它进行声明
鼠标点击函数定义好了以后,就要对它进行一个注册
frame.set_mouseclick鼠标点击handler这样一个, 事件响应函数,处理函数
那么它的函数名的叫click,没有问题,好,我们来运行下
那么可以看到在它的状态栏,会有显示鼠标的点击产生的坐标
那么这是我们第一次对这个版本进行改进
那么第二个改进呢,我是想当我的鼠标
在不同的位置点击的时候,那么小球的位置发生更改
当我的鼠标在小球内部点击的时候,我希望的是, 改变小球内部的显示颜色
而不去更改小球的位置,那么这个时候
我们就要考虑,我们鼠标点击下去后
得到的该点坐标和已经有的这个小球
中心坐标之间的距离,如果它们之间的距离
大于小球半径,那么我们就应该是,更新小球的坐标
如果是小于小球半径,那我就应该是,改变小球的填充色
第一步,我先定义一个辅助函数,来计算两点之间的距离
那么计算两点之间的距离,我们python有一个导入的Math函数
那么它有计算两点之间的距离公式
math.sqrt我直接先给出,(p[0]-q[0])平方加上(p[1]-q[1])平方
两点之间的距离,就是用第一点坐标的水平分量减去第二点坐标的 水平分量括号的平方加上
第一点的竖直分量减去第二点的竖直分量括号的平方,然后开平方
我们将这个值呢返回,我们要对它进行使用
那么我们在哪里进行判断呢?
我们在鼠标点击下以后,进行判断
如果两点坐标呢,两点呢鼠标点击的位置和小球的中心坐标
如果小于小球的半径,那么应该干什么?
我应该改变小球的颜色
假设我把这个颜色改成绿色
否则,也就是,在小球外部怎么办?
如果在小球的外部,那么,我将更新小球的位置
更新小球的位置,那么在这个地方呢ball_color是一个全局变量
所以我们要对它,进行修改,肯定要进行个声明
好了,我们来运行下
产生小球,更新它的位置,没有问题
当我们鼠标点击小球内部,很容易啊,里面的颜色就发生了改变
好,我们再点击别处
有一个小问题,什么问题?
就是,我们的想法是,当我的鼠标在小球外部的时候, 我们只是更新小球的位置
而不改变它的颜色,当我们的鼠标在小球内部的时候, 我们是改变它的颜色
现在我们都是绿色,所以我们在这里呢少写了一句
在哪里呢,就是当我们更新小球位置的时候
同样,我们要把这个ball_color要还原,再来运行
是不是很有意思,那么这就是我们使用鼠标来控制我们画布上的对象
今天的内容就到这里,我们下次课再见
-课程简介
--课程简介
-A 课程视频(算数操作符及表达式)
--绪论
-B 课程视频(变量及赋值)
--变量
--项目提交
-C 辅助视频(计算机结构、Python开发环境安装)
-D 辅助视频(如何提交项目)
--项目提交
-第0周--小测验
-本周项目:"我喜欢Python"
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
--项目提交
-A 课程视频(函数)
--函数
--其它操作符
--随机函数
-B 课程视频(逻辑及表达式)
--逻辑值和比较
--条件
--编程技巧
-第1周--小测验
-本周项目:“老虎杠子鸡虫”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(Python交互式应用)
--事件驱动编程
--按钮
-B 课程视频(输入框、全局变量)
--输入框
--编程技巧
-第2周--小测验A
-第2周--小测验B
-本周项目:猫咪藏在哪个房间
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(画布绘图)
--画布和图形绘制
--字符串处理
--图片和音效
-B 课程视频(计时器)
--计时器
--交互式绘图
--“神奇时钟”游戏
--编程技巧
-第3周--小测验A
-第3周--小测验B
-本周项目:“神奇时钟”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(列表)
--列表
--键盘输入
--碰撞和反射
-B 课程视频(键盘控制)
--速度控制
--运动
--编程技巧
--“桌上冰球”游戏
-第4周--小测验A
-第4周--小测验B
-本周项目:“桌上冰球”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(鼠标输入、列表进阶)
--鼠标输入
--Video
--Video
--Video
-B 课程视频(字典和图片)
--Video
--Video
--Video
--Video
-第5周--小测验A
-第5周--小测验B
-本周项目:“世界杯八强连连看”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类)
--华容道中的类
-B 课程视频(平铺图片)
--平铺图片
--理解对象
--编程技巧
--“华容道”游戏
-第6周--小测验A
-第6周--小测验B
-本周项目:“华容道”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类进阶及文件操作)
--集合
--文件操作
--文字块类
--处理停止的文字块
-B 课程视频(游戏状态控制)
--游戏记分规则
--编程技巧
-第7周--小测验A
-第7周--小测验B
-本周项目:决战三字经
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板
-A、课程视屏(精灵集合)
--Video
--精灵类
--战士类
--编程技巧
-B、课程视屏(动画)
--精灵碰撞
--精灵动画
--编程技巧
--保卫家园游戏
-第8周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板