当前课程知识点:Python 交互式程序设计导论 >  第3周 >  B 课程视频(计时器) >  计时器

返回《Python 交互式程序设计导论》慕课在线视频课程列表

计时器在线视频

计时器

下一节:交互式绘图

返回《Python 交互式程序设计导论》慕课在线视频列表

计时器课程教案、知识点、字幕

各位同学大家好,欢迎回到python交互式程序设计课程中

今天我们主要讲的内容是关于计时器

其实计时器在前面的课程当中大家已经接触过

在很多的游戏开发中,计时器是个非常重要的组件

下面我们开始今天的内容

在讲python中计时器的使用之前,我们先来看一个例子

这张图片相信很多同学都非常熟悉

可能大部分同学都玩过这样一款游戏植物大战僵尸

在这个游戏中大家思考一个问题

哪些游戏元素可能是由计时器周期性控制

比如说:我们从界面上方随机产生的阳光和界面右侧进入这个界面的僵尸

这些游戏元素都有可能是有Timer来控制的,是它周期性的执行

在python中创建一个计时器是非常容易的一件事情

大家看这句话就创建了一个每隔500毫秒执行的计时器

其中Timer是计时器的名称,当然我们可以起其它名字

括号里面有2个参数,第一个参数500指的是时间间隔,单位是毫秒

也就是0.5秒

第二个参数timer_handler指的是计时器的处理函数

这句话的意思实际上是启动计时器后每隔500毫秒调用一次timer_handler这个函数

时间间隔是500毫秒

对于Python计时器而言,它常用的方法主要是两个:

一个是start启动计时器,一个是stop停止计时器

同学们主要熟练掌握这两种方法,对计时器而言基本就够用了

那么第三个还需要知道一个检测计时器运行状态

它返回的是一个布尔类型的值

比如说timer.is_running(),意思是这个timer正在运行吗?

如果正在进行已经被启动了,那它返回的值是true,否则返回的是false

最后我这列出一个程序的例子,这个例子很简单

在Python的这个开发环境中,创建一个simpleguitk的一个窗口

然后在窗口上显示'欢迎进入python世界',并且每隔1秒钟在闪烁

我们来看一下这段代码,第一句话是导入simpleguitk开发包

在这我就不多说了,'displayed=true'这是一个全局变量

timer_handler定义了一个计时器的处理函数

draw函数是绘制界面,frame这句话是创建了一个窗口

set_draw_handler是注册draw这个函数

timer这句话大家应该很熟悉,它创建了一个每隔一秒中执行timer_handler这样的一个计时器

最后启动计时器,启动frame这个框架,这个程序我只是在这简单介绍下

下面我们在Pycharm这个环境当中给大家详细的演示和讲解

我们在Pycharm中对课件上的程序进行详细的讲解

首先我们浏览一下这个程序的主要框架和结构

第一部分,导入simpleguitk,这样一个导入语句在这就不多说了

下面来看一下,第一部分定义全局变量,第二部分定义事件处理的函数

一共有三个,分别是timer_handler主要是计时器的处理函数,start控制计时器的启动,stop函数控制计时器的停止,这个是由按钮来控制

下面还有draw函数,这个draw函数是屏幕绘制

这个同学们在前面的程序的编写过程中已经用过这个函数了,那么再往下呢

是创建一个窗口'frame=simplegui.creat_frame', 窗口的大小和窗口的标题

在往下面是创建按钮组件,创建计时器组件这句话我们很熟悉了,并且注册下面的函数

最后一部分就是启动程序,启动计时器

好,下面我们来具体讲解一下

首先来看一下,这三个函数实际上是我们程序最重要的部分

那么这个函数是计时器的处理函数,也就是说每隔一段固定的时间间隔,它就会被执行和调用

那么start函数和stop函数是由两个按钮分别触发的,也就是说当人点击了这个按钮会调用相应的函数

那么draw是一个屏幕绘制函数,是每隔一定的时间它会执行一次

但是这个执行是由一个叫displayed的全局变量进行控制,当或者如果displayed这个值取true真的时候

这个'canwas.draw_text'才会在屏幕上绘制这样一个字符串,如果displayed取值False的时候,屏幕上不会显示

所以大家看到的这个文字好像在闪烁一样,再往下看,这句话是创建了一个窗口

创建了一个多大的窗口呢,350*100的窗口,标题叫文本闪烁

在这个窗口上有三个组件,第一个组件是btn_start是指启动这个计时器组件

那么btn_stop是一个按钮是用来停止这个计时器,这句话是在frame上注册一个绘制屏幕的函数叫draw,set_draw_handler

timer创建一个计时器'=simlegui.creat_timer()',每隔一秒钟来调用一次timer_handler

大家注意看timer_handler、start、stop,这三种函数就是刚才我前面给大家讲解的这三个函数

那么这个drew函数是在哪调用的呢?

是在'frame.set_draw_handler(draw)'这个里面注册的

它表示这个窗口由draw函数,按照一定的频率进行刷新和绘制

最后我们启动这个timer,启动这个frame

在这我还想强调一点的就是关于displayed显示,我们来看一下,displayed是一个全局变量

首先呢,我把它设为true,就是真值

那么每隔一秒钟我要让displayed的值取反一次,取反以后

会使得这个draw函数根据displayed值决定是否绘制这样一个字符串

怎么取反呢,大家看一下这里,displayed是一个全局变量,我要想修改displayed的值

首先在函数体内部用global这个关键字来对displayed进行描述和修饰

这个时候timer_handler就知道了displayed是调用了外面的全局变量,而不是一个局部变量

怎么取反呢,大家请看第二句话,'displayed = not displayed',

那么displayed的初值我设置的True,每隔一秒钟这个函数被执行一次,它就会取反,not是取反

你原先是True,一not它就变成False,原来是False一not就变成True

所以每隔一秒钟,displayed就会从True变成False,或者从False变成True

那么这个时候,我们的draw函数,大家看一下,那么我们就可以判断当displayed为True的时候,我就用'canvas.draw_text'来绘制

如果display是False的时候,我就不绘制

所以运行效果是这样的,我们来运行下

我们来看一下,它在每隔一秒钟闪烁一次,每隔一秒钟闪烁一次

那么这有两个按钮,我点击停止闪烁,它调用的是stop

它把timer_stop也就是计时器被停止,所以它就不再闪烁了

那我开始闪烁,实际只要把timer置为start

调用start方法置为一个开始的状态,它就可以闪烁了

这个程序呢我就暂时先讲到这里,下面我再给大家来分析一个程序

首先我们来看下这个程序,它是一个怎么样的运行效果,我们来看一下

大家请看一下,这个程序大家看首先是一个字符串

然后每隔一个固定的时间会在屏幕上的随机位置重新绘制一遍

并且在这屏幕的左侧有个message的编辑框

我们可以再里面修改里面的文字,比如说我们修改为'Hello,World!',回车

这个时候屏幕上的文字就会显示为'Hello,World!'

这个程序怎么实现的,我们来看一下

首先我们还是来看下整个程序的结构和框架

第一部分仍然是全局变量的一个定义包括常量的定义

第二部分是关于事件处理函数的一部分内容,一部分函数tick

第三部分是draw函数,这个draw函数还是屏幕绘制,按照一定的频率进行绘制

在这只需要把message里面的文本,在position这个位置上显示出就可以了

然后下面是创建一个窗口,按照固定的宽和高,窗口的标题叫Home

下面一部分是注册事件处理函数,在这里面大家看有一个控件text,就是输入文本的编辑框

那么它的事件处理函数是update,下面是注册draw函数,绘制窗口的函数

再往下是个计时器,创建一个计时器,这个计时器两个参数,一个是interval,这个是个时间间隔

这个在我们前面们的定义全局变量的地方有它的定义,'interval = 1000 '毫秒,就是等于1秒

tick每隔interval这个时间间隔要执行的函数,在前面的这个位置有所定义,在这

这个函数其实就是产生一个随机的位置,产生一个随机的position并把这个position赋给draw函数让它在随机的位置绘制文本

我们来看一下,具体这个程序的运行应该是这样的一个流程

首先我们创建了窗口,注册相应的事件处理函数

那么timer被启动以后每隔interval就会执行tick函数

那么我们看每隔一秒钟inteval取1000,所以是一秒钟

我们执行了tick函数,tick在干什么呢,我们看看

tick里面定义了两个变量:一个是x,一个是y

实际上这就是坐标的横坐标和纵坐标两个分量

那么用'random.randrange',这个函数,随机函数来生成一个值,这个值是(0,width)

width指的是窗口的宽度,在这个区间内生成一个随机的值赋给x,当然是一个随机整数

那么同理在(0,height)之间生成一个随机整数给y,那么由x,y分别赋给position[0]和position[1]这个分量,那么这个时候position存放的一个随机位置的信息

也就说每隔一秒钟产生一个随机位置

然后这个随机位置会被draw函数里面的draw_text函数里面的position所调用

那么这个时候就会在随机的位置上绘制message这个信息

那么大小是36,颜色是红色

那么message的值是怎么得到的呢?大家看一下text,text是一个编辑框

它的注册的事件处理函数式update,现在我们看下update

message我在这里定义了一个全局变量,它的初始值是"Python is Fun!"

那么这个时候我们在update里面会写这样两行代码,这个很好理解

这个text是个编辑框,它的事件处理函数实际上会接受它编辑框里输入的文本

而text就是这个文本的内容

我们要对message进行修改,所以要在函数体内部用global这个关键字对message进行修饰

告诉update函数我这的message不是一个局局部变量而是全局变量

那么把text赋给message这个全局变量,就是修改message的值

所以当我们输入"Hello World!"以后敲回车,这个时候"Hello World!"就赋给了message

而draw函数在绘制的时候,就会把"Hello World!"绘制在随机产生的位置上

好了,这就是两个主要的程序

关注的焦点是计时器的使用

今天的课程就讲到这里

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

计时器笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。