当前课程知识点:Python 交互式程序设计导论 >  第2周 >  A 课程视频(Python交互式应用) >  事件驱动编程

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

事件驱动编程在线视频

事件驱动编程

下一节:事件可视化跟踪执行

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

事件驱动编程课程教案、知识点、字幕

欢迎回到Python交互式程序设计课程中

今天我们要学习一个新的概念,叫事件驱动

听上去这个概念对大家来讲可能比较陌生

但在生活中,有很多事件驱动的例子

我会举这样一些例子来说明事件驱动的本质含义

好 下面我们开始今天的内容

在讲事件驱动编程之前

我们首先来回顾下同学们在此之前编的一些程序

它们的执行过程有哪些特点

主要有两个特点

第一, 执行过程是顺序的线性的

第二, 只要保证必要的输入信息

执行过程完全由计算机控制

几乎没有人机交互

同学们回想一下

那么在右边我给大家举了一个简单的例子

我们来看一下

第一句话是用input接收同学们的一个键盘输入

而这个输入的值呢是一个字符串类型赋给x

第二句话是把字符串类型的x转换为一个整数

并把这个结果赋给x1

从第三行开始

是一个if语句判断x是正数负数还是零

这是一个非常容易理解的简单的程序

那么在这个程序的执行过程当中

只要保证你基本的x值的输入

剩下的过程是由计算机完全控制的

几乎不需要人来干预

但是回想一下

我们曾经接触过的程序都是这样的吗

显然不是

在这里呢 我列出了两个经典游戏的一个图形界面

左边呢 是推箱子

这个程序一启动以后

等待用户用键盘来控制这个小人的运行方向

推动箱子来覆盖这些小球

如果你不敲击键盘这个小人是在原地不动的

那么右侧呢 是一个非常著名的游戏叫cs

那么在这个游戏中

大家要通过键盘和鼠标来控制第一视角的人物

他的移动和武器的指向

那么在这样两个游戏当中

同学们肯定能感觉得到

它一定是需要人和计算机不断地发生交互

那么大家来看

这张幻灯片我列出了两个图

左侧的这张图呢是同学们在此之前编的程序

它的一个执行模式

从程序开始只要保证必要的信息输入

它会依次执行代码块A

代码块B 代码块C 代码块D

这个执行的顺序取决于代码块的位置

那么这个执行过程几乎不需要人的干预

而右侧这个图片

大家来看一下就会比较复杂

实际上也很好理解

大家看

从开始到初始化主要完成一些图形界面的绘制

全局变量的初始化等等这样一些工作

当初始化完成以后

程序处在一个等待状态

等待什么呢 等待事件的发生

什么叫事件

我举一个发生在大家身边的例子

同学们比较好理解的例子

作为大一的新生你们一定是刚刚参加完军训不久

大家回顾一下我们的军训过程

同学们列队站在操场上

等待教官发出指令

首先 教官发出的指令是有限的

可能是立正 稍息

向左转 向右转 向后转

或者是解散等等

那么同学们听到这样的指令就会做出相应的动作

直到教官说解散你们才会结束今天的军训

是这样一个过程

跟这样一个例子非常相似的就是

我们的事件驱动编程的这样一个模式

我们来看一下

等待事件的发生实际上就像大家等待指令一样

当我们监听到某个事件就像大家听到某个指令一样

我们会做出相应的反应或者动作

这个时候呢我们会执行相应的处理代码

比如说当我们监听到事件A发生了

我们就会执行事件A对应的处理代码

执行完以后又返回到等待状态

等待下一个事件发生

那么假设事件B又发生了

那我们监听到以后呢

又会执行(事件)B的处理代码

(执行完后)又返回等待状态

直到我们监听到退出事件

那么会执行退出的代码

直到程序结束

这样一个过程

非常类似于我们军训的整个过程

在这里我要强调两个问题需要大家格外注意

第一 什么叫事件 到底什么是事件

你可以不用精确的定义他

但是你要理解他

第二 就是这个所谓的等待事件发生

监听到事件发生

处理相应的代码

然后循环等待这样的一个过程

直到退出事件导致程序结束

下面呢我们来看一下

常用的交互式应用程序的界面是什么样子的

它有哪些常见的组件来构成的

大家看到的这个图呢

应该是QQ的登陆界面

在这个界面上我们可以看到有下拉列表框

有一个编辑框

还有复选框

还有按钮

当然还有退出等等这样一个界面

我们所谓的人机交互都是通过

这样常见的组件来完成的

那么在Python当中

我们在本课当中会用到一个叫simpleguitk的

这样一个图形界面开发包

那么这样一个图形界面开发包当中

它能识别的事件或者动作呢

是有以下几种

第一类叫输入事件

第二类叫键盘事件

第三类叫鼠标事件

第四类叫计时器事件

那么输入事件比如说按钮

比如说文本框的输入

键盘事件主要指的是键盘的按下和抬起

它是分成两个步骤

它都可以识别

那么鼠标事件最常用的就是点击鼠标左键

还有(使用鼠标)拖动

计时器事件是周期性触发的事件

它是由一个计时器控件来控制

前三类事件是由人的操作动作来触发

换句话来说是人机交互的主要途径

你要想控制计算机

你要想干预这个程序的执行过程

就需要通过以上三类事件来完成

最后一个事件计时器事件

它是一个周期性触发的

每隔多少秒或者每隔多少毫秒

它会周期性触发

这个事件是人提前设定好的

程序一旦运行你是无法干预的

它会按照固定的周期来执行

那么为了说明这个事件驱动的实际执行模式

我给大家在这里列了个例子

在Pycharm的实际开发环境当中我会详细讲解

在这我只是简单的给大家介绍一下

首先第一行

是对simpleguitk这个图形界面开发包进行导入

第二是定义一个事件处理的函数

第三块是注册这个(事件)处理函数

第四块是启动计时器

这样一个程序虽然很短小

但是他已经把事件驱动编程

这样一个模式展示的非常清楚

下面我们会在Pycharm里对它进行详细的讲解

好 下面我们再来看下所谓的事件队列

其实讲到刚才这个事件驱动编程模式的这个图的时候

同学们可能心中会有疑问

如果事件是扎堆发生的呢

它不是一个一个发生

它几乎是同时发生呢

就会发生这样一个情况

产生事件队列

会有一个等待的状态

什么意思 我们来看一下

当事件1 事件2 事件3 事件4 一直到事件n

在很短的时间内几乎是同时发生

那么它会产生一个事件队列

按照先来先到的原则

或者叫先进先出的原则

排成一个队列

就像我们在食堂打饭或者在超市购物一样

按照先来后到的原则

大家会排成一个队列

先来的先处理先离开

同样的道理

那我们程序处于等待的时候

如果在某一时间同时发生了很多事件

注意我这里说的同时并不是严格意义上的同时

指的是在很短的时间内(同时)发生了事件

它会按照时间的先后顺序做一个排序

它会从第一个发生的事件这开始处理

从这个队列中依次处理

那么直到把所有的事件处理完毕

那么每一个事件在程序当中

一定会有一个已经注册过的对应的处理函数

这个流程大家可以仔细琢磨一下

每一个事件发生

它会调用相应的处理函数

再取第二个事件

再调用第二个事件处理函数

直到这个事件队列变成空为止

这就是我们所谓的事件队列

好 下面我们会在Pycharm中演示具体的实例

打开Pycharm

我已经在test.py这个文件中

已经把代码输进去了

为了节约时间

我们首先来运行一下这个程序

看看它的运行结果

大家看 在控制台会

每隔一个时间间隔输出一个你好

又输出一个你好

每隔一个固定的时间间隔输出一个你好

这是它的运行效果

我们来分析一下源代码

这个程序呢我把它分成四个部分

分别有相应的注释我们来看一下

第一个部分是这一句话

这句话的含义是

导入simpleguitk这个用户图形的一个界面包

一个开发包

那么这个呢后续的课程会有详细的讲解

在这我就不展开讲了

第二部分呢是定义创建一个事件处理的函数

在这我定义了一个函数名叫hello()

向大家打招呼

这个函数只有一句话print(‘你好!’)

输出你好这个字符串

def是来定义一个函数

这是定义一个事件处理函数

第三部分呢是把这个定义好的事件处理函数

与某个事件关联起来

我们叫注册事件处理函数

在这里我使用的是计时器

通过simplegui来创建一个计时器

Creat一个计时器

然后把这个事件处理函数与这个计时器关联起来

这个5000代表的是时间间隔

单位是毫秒

那就是5000毫秒折算成5秒钟

换句话说

每隔5000毫秒也就是5秒钟

hello()这个函数会被调用一次

每隔这个时间间隔hello()函数会被调用一次

第四部分呢是把这个计时器启动一下

所以是timer.start()开始了

开始计时

这就是同学们为什么每隔一个固定的时间间隔

看到输出端输出一个你好

那么在这里面同学们请注意两点

第一点我们一定要定义一个事件处理函数

这个事件处理函数我在这里定义的很简单

当然同学们也可以定义的很复杂

将来我们还可以定义

键盘的事件处理函数

鼠标的事件处理函数等等

第二个重要的部分就是

要把定义好的事件处理函数与某个事件关联起来

或者叫对应起来

我们叫注册事件处理函数

在这里我使用的是一个timer计时器

把hello与这个周期性触发的

一个timer事件对应起来

这个是在理解事件驱动编程的这个模式底下

需要格外注意的两点

当然在后续的课程当中

同学们还要学鼠标事件 键盘事件

还需要学这些东西

那么在后续的课程中会有专门的讲解

今天的课就讲到这里

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周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

事件驱动编程笔记与讨论

也许你还感兴趣的课程:

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