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

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

编程技巧在线视频

编程技巧

下一节:游戏说明

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

编程技巧课程教案、知识点、字幕

大家好,欢迎来到我们本周的编程技巧课。

通过前面的学习呢,我们已经接触到了交互式编程。

当然我们的项目中也已经使用了事件驱动程序。

不知道大家注意到没有,事件驱动程序,它不是被程序内的函数调用的。

而是被我们程序外的一些事件触发的。

比如说,你点击了一个按钮。

那你点击按钮的这个动作呢,它就触发了我们按钮对应的处理程序。

那我们今天的课的主要内容呢,

就是来探索一下这种调用方式的使用方法以及应该注意的问题。

好,我们先看我们第一个例子。

嗯,这段代码呢,是……我们先简单看一下吧。

它主要呢是创建了一个frame,

然后呢,它在这个frame上添加了有标签、有按钮。

运行下看这个程序是用了哪些操作。

运行之后发现,没有任何显示, 也没有任何打印信息,而程序已经退出了。

那这个是为什么呢?

大家注意看,在我们写交互式程序的时候,

我们创建frame之后呢,我们需要把这个frame启动起来。

我们需要frem.start。

就是我们调用它的start方法,然后把它给启动起来。

这样的话,我们运行的时候,程序就会有显示结果了。

再运行一下,看。

那我们不看代码,就看,它这个frame的窗体的名字呢是叫‘正方形’

很显然它是一个画正方形的一个程序喽。

放大边长,你看,我在点击放大边长的这个按钮的时候,它的值也是在变化。

然后我在减小的时候,它的值也是在变化——减小。

然后重画正方形,正方形这个地方,我们可以看到它重画了一下,是吧?

那,我们这节课呢,主要是讲事件驱动程序,我给大家对应一下。

你看,我们放大边长的时候,这个按钮。

这个按钮呢,首先,定位到这个地方。

add_button这一行,放大边长。

然后它对应的事件是这个函数,up_button_handler(),是吧?

它对应的事件是它。

那这个、这个函数,我们把它叫做事件驱动程序。

它对应的是我点击放大边长这个按钮之后进行的一些操作。

那当然了,接下来我们减小边长这个按钮对应 的操作就是down_button_handler()了,是吧?

我们看一下,重画正方形,它显示的是这个。

是吧?改变正方形的边长,是这个函数。

它们三个都叫做事件驱动程序。

那当然了,这个最后一个draw呢,是我们绘制图形的事件处理函数。

这样的话,大家就比较能清楚的明白过来

我们这几个事件驱动程序都不是在程序内部调用的,

而是通过我点击按钮的点击事件,

来调用这个对应的函数来完成相应的操作,对吧?

那我们看一下这个程序有没有什么问题噢。

我增大、增大。

看,我重画正方形。

发现我正方形的边长一直都没有变,还是10。

通过代码我们也可以看到,

它的正方形,边长初始值就是10是吧?

那说明这个地方出了问题。

它没有同步的跟着我放大边长的时候增大它的边长。

那我看,既然它是重画正方形这个事件处理的,

那我们就看一下这个事件处理程序噢。

事件处理程序应该是这个吧?

我们看它在这个地方,只做了一个赋值的操作

我们知道,我们在增大边长或者减小边长的时候

边长值是发生了变化

但是我们在改变正方形边长的这个事件驱动程序里面呢

并没有对边长进行一些变化。

那好了,那我要进行下修改了。

看,我是把size的值,就是我边长的值

确实已经给复制给了side,是吧?

已经赋值了,它只是说没有显示。

没有显示出来的结果

就是在那个label上面没有正确显示了是吧?

就是它已经修改,但是没有正确显示。

我想显示那个值呢,我就应该这样做。

好,这是我们显示边长值的。

我首先给这个标签呢,起一个名字。

side……side_label,好。

当我边长的值发生变化的时候,我就要重置这个标签的显示文本。

就是set,点set是吧?

重置它的显示文本,这个时候呢我应该怎么显示啊?

是不是应该跟我在创建的时候显示方式是一样的?

好,那我把它复制一下,直接复制,Ctrl+c。

然后把它复制(粘贴)到这个地方去,Ctrl+v。

这样的话,我就是在赋值的过程中呢

同步的修改了标签的显示值。

我再运行一下,把它调过来。

好,看一下我放大,增大边长。

现在边长值已经是14了。

我重画正方形,它已经变成14了

它是同步增大的。

那我再减小,变成9、8、7,变成6,是吧?

然后再重画,边长变成6了。

这是我第一个问题修改了,那我再进行一下第二个,减小边长。

嗳?大家发现我的边长值,现在变成负值了。

在我们的常识里面,一个正方形的边长是不能为负的。

那它既然成了负值,说明这个地方有一点问题。

那我们就去找对应的,减小边长,这个按钮的驱动程序。

减小边长是在这儿,我们发现,对于一个全局的size值呢

它每次都是去减小1,但是它没有进行判断。

当什么时候我去给它减小啊?

我加一个if判断,满足我的条件的时候我再进行减小。

比如说我的size

如果我的size比1大的话,我应该去减小1。

那如果它比1小

我就不要去减小了是吧?

因为0减1就变成负的了嘛。

好,我们if后面的冒号不要忘了。

然后我们去调整一下缩进。

然后呢,缩进调整了。

调整完了之后读一下噢

就是说,如果我这个size的值呢

比1大,那我就去让它减小一个1。

大家算一下,2减1是1吧?

那就是我编程的最小值应该是1。

好,我再运行一下。

我再运行一下,我减小了噢。

大家看,我减小到1之后,我再点击减小按钮

是不是已经不起作用了?

就是说,我已经在减小边长这个事件里面把它给限定了。

减小,不能再变化了噢。

重画正方形,边长是1。

然后增大,当然增大这一块呢没有做限制。

重画正方形。

那这个呢,两个问题我们就给它解决掉了。

通过这个例子呢,我们想说的第一个问题就是说

我们在交互式程序的时候,首先创建一个frame

一定要start

就要启动这个frame。

第二个呢是说,我们的事件驱动程序,

它的调用是在程序的外部,而不是在程序内调用的。

它是由……比如说我们鼠标要点击事件,

之后我们创建输入框的时候,

我们输入框里输入一个文本之后,敲的回车键。

它都去会触发我们的事件驱动程序。

然后,还有一个问题就是,大家在做交 互式程序的时候,一定要进行多次测试。

就把每种可能的情况都测试到。

因为它不是在函数里面调用的么

它可能代码的那个控制流程看起来不那么清楚。

所以你要多次运行,然后把你所有的功能都正确的测试一遍之后,

你的程序才能保证它是没有错误的。

这是第一个例子,我们现在看第二个。

第二个例子呢,发现我创建了三个timer定时器是吧?

然后每一个timer定时器的间隔已经给它指定好了

0.1秒,0.3(秒),0.5秒。

它对应的事件句柄呢也已经写好了。

那它每一个都是打印一句问好的信息。

不管是我英文的也好,中文的也好,打印一句问好信息。

那我运行一下,看一下是不是按照我分析的这样,

程序是(这样)执行的。

运行之后发现,

同样没有任何显示。

这是为什么呢?给大家讲一下,注意噢。

当我在创建了一个定时器的时候,我一定要让这个定时器启动。

就是相当于刚才我们的frame不是要start吗?

那我们的timer也一定要start之后才可以起作用,

才可以完成定时器的这样一个作用。

那我们来测试一下。

我给第一个定时器起个名字叫timer……timer1吧。

timer1,我测试一下,看一下,会不会起作用。

然后我timer……

start,运行一下。

看一下它是不是在每隔0.1秒就在打印我的hello,是吧?

好,它一直在打印,一直在打印。

那说明我这个是起作用的。

说明我启动之后timer是起作用了,那我后面的同时也修改一下。

timer2,timer2噢。

每一个定时器要赋一个不同的名字。

这个我就timer3吧。

同样,我第一个,timer2。

嗯?大家发现没有我把什么东西写错了?

我在这个地方写的是time2,而这个地方我要用timer。

这两个变量不一样,是吧?

它到时候它肯定要提示你这个没有定义的。

好,我先、我先就这么错误的写上了噢。

time……这个我写对(的)吧,

timer3.start。

运行一下,它肯定会提示我一个错误。

看,看,它说我没有定义是吧?

Name error就是?名字错误嘛。

命名错误,函数啊或者你的变量名没有定义。

它说我这个是没有定义的。

当然错误呢……为什么错了刚才我已经 跟(给)它分析过了,因为我写错了噢。

这个地方应该是timer3,timer3。

timer噢,timer2和timer3。

然后现在肯定就没有问题了噢。

看,是不是?间隔打印。

三种问好方式,然后把它停掉。

说明它已经没有问题了。

创建了定时器之后一定要记得把定时器呢,启动之后才可以有效噢。

好,我们今天的课呢,就上到这里,下次再见。

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

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

编程技巧笔记与讨论

也许你还感兴趣的课程:

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