青少年编程魔法课堂 Python图形化创意编程

978-7-115-58443-4
作者: 张新华谢春玫梁靖韵
译者:
编辑: 赵祥妮

图书目录:

详情

这是一本专为没有编程基础的青少年读者编写的Python入门图书,即使是小学生也可以轻松阅读本书。 全书包含十几个短小精悍且趣味十足的程序,采用面向对象程序设计,通过可视化与游戏化相结合的编程实践,使读者轻松进入Python的奇妙世界。

图书摘要

版权信息

书名:青少年编程魔法课堂Python图形化创意编程

ISBN:978-7-115-58443-4

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    张新华 谢春玫 梁靖韵 著

责任编辑 赵祥妮

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e58443”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

内容提要

这是一本专为没有编程基础的青少年读者编写的Python入门书,即使小学生也可以轻松阅读本书

全书包含几个短小精悍且趣味十足的程序,采用面向对象程序设计,通过可视化与游戏化相结合的编程实践,使者轻松进入Python的奇妙世界。

编委会

编委会主任:严开明

编委会委员:张新华 伍婉秋   徐景全 谢春玫

        梁靖韵 刘路定 黎旭明 热则古丽

部分程序效果示例图

前  言

为了更好地与其他人交流,我们需要学习人类的语言;为了更好地与计算机交流,我们需要学习计算机的语言——编程语言。如果我们不懂编程语言背后的计算思维和编程逻辑,就不能很好地理解计算机,不能充分地利用计算机为我们服务。

对于初学者来说,将Python作为入门编程语言是一个很好的选择,因为它易于学习,功能强大。Python被广泛应用在人工智能、科学计算、大数据、金融、系统运维、图形处理、文本处理、网络爬虫等领域,全世界有很多人正在使用Python从事科研和软件开发工作。

虽然学习Python的优势非常明显,但是对于初学者来说,它的缺点也是显而易见的。

(1)Python及其默认的集成开发环境界面——IDLE,均是全英文的,这对尚不熟练英文的初学者来说是不小的学习障碍。

(2)Python环境配置复杂,为了实现某些功能,经常需要下载安装相应的模块,这些模块的安装需要手动输入复杂的语句实现。

(3)以Visual Basic、Visual C++为代表的编程语言在很多年前就已经进入了“图形化界面设计、所见即所得”的“视窗”时代,但目前却很难找到一个适合Python初学者使用的简单可视化界面设计工具。

为了解决初学者遇到的这些问题,我们使用Python开发了基于图形化界面设计的全中文Python开发环境——Visual Python。该软件是全国教育科学“十三五”规划2019年度教育部重点课题“中小学智能实验教学系统的构建与应用实践研究”(DCA190327)子课题的研究成果。

它不仅能通过简单的操作配置好令初学者头疼的Python环境,更令人惊喜的是,初学者仅用鼠标“绘制”就能生成专业的Windows程序界面,这使得初学者摆脱了繁杂、低效的界面设计过程,将精力更有效地集中于逻辑代码的实现过程。

基于Visual Python,我们精选了十几个趣味性很强的程序汇编成本书,这些程序的代码简短且易于实现,大大降低了学习难度,非常适合Python入门培训或初学者自学。更进一步地,我们还努力尝试在教学方法和教学理论上有所创新,主要体现在以下几个方面。

(1)抛弃了“简陋”的字符界面编程,直接学习主流的Windows图形界面编程。

(2)抛弃了多数Python入门教材中仍然停留在面向过程程序设计范型的教学思路,直接采用面向对象程序设计(Object Oriented Programming,OOP)的教学思路,使学习者能够紧跟技术潮流,减少无谓的学习成本。

(3)尽量避免传统编程学习过程中的枯燥无聊状态,通过新颖有趣的游戏式编程,学习者将在充满想象和激情的创造性学习过程中,轻松掌握Python的使用。

(4)为方便教学,书中的每一课均设计为在一个课时内完成。每节课的“准备知识”“界面设计”“代码编写”部分是学习者课内必须完成的基础模块,“动手实践”和“扩展任务”部分是针对课堂任务完成较快的学习者设计的选学模块,“课后练习”部分是思考总结的提升模块。希望这样的编排方式可以让感兴趣的读者进一步探索本书内容。

亲爱的读者们,请跟随本书进入崭新的Visual Python图形化编程世界,一起创造精彩又有趣的Windows程序,体验不一样的编程快乐吧!

张新华

2022年4月


引  子

Python是一种跨平台、开源、解释型的高级语言,它易于学习,功能强大,于1991年推出后迅速获得各行各业的关注,并得到了广泛的应用。

但作为Python初学者,我想你多半会有这样的疑惑:都21世纪了,为什么Python代码的运行界面仍旧是图0.1(a)这样“远古时代”简陋的控制台窗口呢?为什么不能像图0.1(b)一样,显示标准的Windows图形化界面,有按钮、图像、动画……

图0.1

另外,如图0.2所示,如果不小心写错了代码,运行程序时输出的错误提示信息全是英文,完全看不懂需要怎么修改,这种情况怎么办呢?

图0.2

现在好了,打开网页浏览器,输入网址“www.magicoj.com”,下载并安装图0.3所示的Visual Python套装软件,我们就可以:

(1)告别“简陋”的控制台窗口,轻松设计出漂亮的图形化界面;

(2)使用全中文代码编辑器IDLE++,运行程序时输出的错误提示信息也是中文的;

(3)轻松实现各种炫酷效果,就连人脸检测与识别也能通过几行代码实现。

图0.3

怎么样,心动了吗?那就安装好Visual Python,开启我们奇妙的图形化Python编程之旅吧。

安装好Visual Python后,双击图标打开Visual Python,工作界面如图0.4所示。

图0.4

我们可以调整窗体设计区的位置和大小。在窗体设计区的空白处按住鼠标滚轮,当鼠标指针的形状变为时,拖动鼠标,将窗体设计区往屏幕的左上方略微移动(窗体设计区显示在屏幕上的位置就是运行时程序窗体显示的位置),如图0.5所示。

图0.5

将鼠标指针移到窗体设计区的右下角,当鼠标指针的形状变为时,按住鼠标左键拖动窗体设计区,即可调整窗体设计区的尺寸,如图0.6所示。

图0.6

我们可以很方便地用鼠标在窗体设计区绘制Python程序的界面。

以绘制输入框为例,首先在控件箱中选中欲绘制的控件,只要在相应的控件上单击即可。控件的文字颜色变为红色即表示该控件已被选中,如图0.7所示。

图0.7

在窗体设计区的合适位置按住鼠标左键,拖动鼠标指针到合适位置后松开鼠标左键,即可绘制出该控件(单击鼠标右键可删除绘制好的控件),如图0.8所示。

图0.8

如果绘制好的控件位置不合适,可以在该控件上按住鼠标左键将其拖动到合适位置(选中控件后,使用键盘上的方向键也可以移动该控件)。

如果绘制好的控件尺寸不合适,可以将鼠标移到该控件的右侧,当鼠标指针变为时,按住鼠标左键拖动控件调整尺寸。

界面设计好后,单击按钮,在弹出的对话框中选择文件保存位置,在“文件名”输入框中输入程序名,例如“我的第一个程序”,单击“保存”按钮,将其保存为模块(Module)文件,如图0.9所示。

图0.9

此时Visual Python的界面将以最小化的方式隐藏,同时打开Python代码编辑器——IDLE++。IDLE++是基于Python默认代码编辑器IDLE的深度汉化改进版。IDLE++显示自动生成的代码如图0.10所示。

图0.10

我们可以将动画示例代码删除并替换为自己写的代码,或者如图0.11所示,预先在Visual Python的面板中将包含示例代码的选项设置为“否”,这样以后自动生成的代码中都不会再包含示例代码。

图0.11

IDLE++中几乎所有的英文均已汉化,甚至绝大多数的错误提示信息也是中文,这更有利于初学者调试代码,如图0.12所示。

图0.12

单击按钮执行代码,一个绘制好控件的窗体出现了,如图0.13所示。

图0.13

在保存模块文件的目录下,还生成了一个名为“GUI_我的第一个程序.pyw”的辅助文件,如图0.14所示。它保存了界面设计和一些功能实现代码,是模块文件正常运行的保证。注意,这两个文件的名称一经确定,就不能随意修改,否则程序将无法运行。

图0.14

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e58443”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

一步一步顺序来

第一课 奇妙的字符画

本课我们将使用字符绘制出类似图1.1所示的字符画。

图1.1

我们将学到的主要知识点如下。

(1)输出函数print()和Print()的使用。

(2)函数的概念。

(3)代码的缩进格式要求。

(4)注释语句的使用。

(5)Python文件的保存格式。

(6)播放音符函数play()的使用。

Python由荷兰人吉多•范罗苏姆(Guido van Rossum)发明。他认为当时已有的编程语言对非计算机专业的人员十分不友好,于是在1989年12月,为了打发无聊的圣诞节假期,吉多开始写Python的第一个版本。“Python”这个名字来自吉多喜爱的电视连续剧《蒙蒂蟒蛇的飞行马戏团》。他希望新的语言Python能够具有创建全功能、易学、可扩展的特性。

Python崇尚优美、清晰、简单,是一门优秀并被广泛使用的语言。有人说,完成一个相同的任务,使用汇编语言需要1000行代码,使用C语言需要500行代码,使用Java需要100行代码,而使用Python可能只要20行代码。

Python自问世以来,迅速成为一门流行的编程语言,越来越多的公司和机构选用Python作为其主要开发语言。例如:

Google的Google App Engine、code.google.com、Google Earth、Googlebot、Google Ads等项目大量使用Python进行开发;

美国国家航空航天局(NASA)大量使用Python进行数据分析和运算;

视频网站YouTube就是用Python开发的;

在线云存储网站Dropbox的功能全部用Python实现,网站每天处理约10亿个文件的上传和下载;

图片分享社交网站Instagram的功能全部用Python开发,网站每天有超过3000万张照片被分享;

社交网站Facebook的大量基础库通过Python实现;

Linux发行版本Redhat中的yum包管理工具就是用Python开发的;

豆瓣公司几乎所有的业务用Python开发;

国内的问答社区知乎是用Python开发的;

在线医疗网站春雨医生是用Python开发的。

除此之外,搜狐、金山、腾讯、网易、百度、阿里巴巴、新浪、果壳等公司都使用Python来完成各种各样的任务。

打开Visual Python,单击窗体设计区上方的按钮,在“窗口设置”中,设置“窗体名称”为“奇妙的字符画”,设置“窗体颜色”为喜欢的颜色,设置窗体全屏,单击“应用”按钮,如图1.2所示。

图1.2

单击按钮,在弹出的对话框中选择文件保存位置,在“文件名”输入框中输入“字符画”,单击“保存”按钮,将其保存为模块文件。

以.py结尾的Python文件双击后不能直接运行,它通常会直接被Python编辑器(例如IDLE++)打开。

以.pyw结尾的Python文件双击后可以直接运行,就好像运行Windows的可执行文件一样。当然,它仍然可以用IDLE++打开。

可以事先在Visual Python的“设置”面板中设置默认保存类型是.py或.pyw。

保存模块文件后,Visual Python的界面将以最小化的方式隐藏,同时打开IDLE++。如图1.3所示,可以看到有一段示例代码放在“Init()”之后,这种语句以def开头,以冒号(:)引出代码块,我们称这种代码块为函数,“Init”即为函数名。这么做使得代码更加简单易懂,因为我们可以用这种方式将复杂的任务分解为一个个代码块。

图1.3

函数是指能完成一定功能的代码块,Init()函数是Visual Python特有的自定义函数。“init”的中文含义是“初始化”。

Visual Python规定程序运行时,首先执行Init()函数内的代码,所以通常将一些需要在程序初始运行时执行的代码放在Init()函数中。

Python有许多内置函数,我们可以调用它们使程序变得简洁。

你注意到每一行代码后面的符号“#”和中文说明了吗?“#”符号表示该部分为注释语句。注释语句起到备注作用,是对代码的解释和说明,它可以帮助初学者更快速地理解代码的含义。Python解释器在执行代码时会忽略注释语句,不对它做任何处理,就好像它不存在一样。

在不修改任何代码的情况下,直接单击IDLE++的按钮运行程序,示例代码会在窗体上展示一段动画以供初学者学习参考(此段代码可替换为我们自己编写的代码),如图1.4所示。

图1.4

计算机的“大脑”是CPU,中文名是中央处理器。它不能直接执行Python代码,只能执行由0和1组成的机器语言。

所以,我们需要一个翻译工具,把Python代码翻译成计算机能“听懂”的机器语言,这样计算机才能按照Python代码的要求去“做事”,这个翻译工具就是Python解释器。

单击IDLE++中的22行模块按钮,实际是调用Python解释器去读取Python代码,再将其翻译成机器语言,从而告诉计算机如何做。其工作原理如图1.5所示。

图1.5

删除Init()函数里的示例代码,输入如下代码。注意除双引号内的中文外,其他字符均为半角。此外,Python是严格区分大小写的,print和Print是不一样的。

def Init():                                               # 初始化函数
    print("这是我的第一个Python程序")
    print("我的心情很激动")
    print("我希望它能够一次运行成功")
    print("因为传说中,第一个程序如果能一次运行成功")
    print("那么在以后的学习过程中,就会无往不利") 

注意输入的每行语句前有4个空格,因为Python采用代码缩进和冒号(:)来区分代码块之间的层次。

Python默认用4个空格作为一个缩进量(在默认情况下,按一次Tab键就输入4个空格)。

Python对代码的缩进要求非常严格,同一级别代码块的缩进必须一样,否则Python解释器会报语法异常错误(SyntaxError)。

print()用于输出括号内的内容,是Python中最常见的一个函数。

代码写好后单击按钮保存,再单击按钮运行,如果代码没有错误,运行结果如图1.6所示。

图1.6

可以看到,print()逐行在控制台窗口输出了双引号内的文本内容(这种用双引号或者单引号括起来的文本内容称为字符串),且一行输出结束后自动换行。字符串的内容必须包含在两个双引号或两个单引号内。字符串可以包含英文、数字、中文以及各种符号。

Visual Python新增了一个可以在窗体上显示字符串的函数Print(),例如Print("我可以在窗体上显示哦"),还可以设置输出字符串的前景色和背景色。例如,设置输出字符串的字体颜色为红色、背景色为蓝色的语句为Print("字符串内容","red","blue")。

若设置了字符串的输出坐标,则该行输出不占用正常输出语句的位置。例如:

(1)设置字符串的输出坐标为(50,100)的语句为Print("字符串内容",x=50,y=100);

(2)既设置字符串的输出坐标,又设置字符串的字体颜色为红色、背景色为绿色的语句为Print("字符串内容",fgcolor="red",bgcolor="blue",x=120,y=150)。

颜色的定义可参照附录D,注意颜色代码均为字符串,必须包含在两个双引号或两个单引号内。

下面的代码用于绘制一幅心形字符画,输出效果如图1.7所示。现在发挥你的创造力,绘制出更漂亮的字符画吧。

def Init():                                  # 程序运行时就执行一次的初始化函
    Print(" ****** ******",fgcolor="red",x=100,y=10)
    Print(" ********** *********",fgcolor="red",x=100,y=20)
    Print(" ************************",fgcolor="red",x=100,y=30)
    Print(" ************************",fgcolor="red",x=100,y=40)
    Print(" ************************",fgcolor="red",x=100,y=50)
    Print(" ************************",fgcolor="red",x=100,y=60)
    Print(" ***********************",fgcolor="red",x=100,y=70)
    Print(" *********************",fgcolor="red",x=100,y=80)
    Print(" *******************",fgcolor="red",x=100,y=90)
    Print(" *****************",fgcolor="red",x=100,y=100)
    Print(" ***************",fgcolor="red",x=100,y=110)
    Print(" *************",fgcolor="red",x=100,y=120)
    Print(" ***********",fgcolor="red",x=100,y=130)
    Print(" *********",fgcolor="red",x=100,y=140)
    Print(" *******",fgcolor="red",x=100,y=150)
    Print(" *****",fgcolor="red",x=100,y=160)
    Print(" ***",fgcolor="red",x=100,y=170)
    Print(" *",fgcolor="red",x=100,y=180)

图1.7

在开始学音乐时,老师都会教我们唱“do re mi fa so la si”,在音乐中它们是非常重要的7个音。基本的C大调音阶就是由它们组成的,如图1.8所示。

图1.8

在Visual Python中可以通过编程将这7个音用高音、中音、低音的方式来播放。例如,play("1",400)表示播放中音“do”400毫秒(1秒=1000毫秒);play("+2",400) 表示播放高音“re”400毫秒;play("-3",400) 表示播放低音“mi”400毫秒。

试从网上找一段简单的乐谱,编写代码,使程序既能显示字符画,又能播放一段音乐。

 在 Python 中字符串也可以使用三个单引号或三个双引号来表示字符串,这样字符串中的内容就可以多行书写,并且被多行输出。

例如输出如下一段古诗文的代码。

Text="""
 观沧海
 
东临碣石,以观沧海。
水何澹澹,山岛竦峙。
树木丛生,百草丰茂。
秋风萧瑟,洪波涌起。
日月之行,若出其中;
星汉灿烂,若出其里。
幸甚至哉,歌以咏志。
 
"""
 
def Init():                                               
    Print(Text,bgcolor='red')  # 输出之前定义的字符串Text,注意不要加引号

如图1.9所示,网络上有一些免费的在线生成ASCII字符画的网站,例如https://tools.kalvinbg.cn/image/asciiPic等,试选择喜欢的图片生成字符画后,使用Print()绘制到窗体上。

图1.9

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e58443”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

第二课 简单计算器

本课我们将制作一个如图2.1所示的简单计算器,用于计算复杂的数学表达式。

图2.1

我们将学到的主要知识点如下。

(1)数值的类型。

(2)算术运算符的使用。

(3)数据类型的强制转换。

(4)控件的事件驱动的添加。

(5)字符串和数值的区别。

(6)对象、属性、方法和事件驱动的概念。

(7)字符串连接符“+”的使用。

(8)type()、get()、delete()、insert()、eval()的使用。

上一课我们使用print()函数在屏幕上输出了各种各样的字符串(string)。除了字符串类型外,Python还定义了许多其他的数据类型,例如数值的类型有整型和浮点型:

(1)整型(int)数值就是平时所见的整数,如-1、2、-3、4、100、1200等;

(2)浮点型(float)数值就是平时所见的小数,如3.14是浮点型数值,1.0也是浮点型数值。

Python区分整型和浮点型的唯一方式,就是看有没有小数点。

通过函数type()可以输出数据的类型,例如运行以下代码。

print(type("字符串"))

print(type(100))

print(type(3.14))

输出结果如下。

<class 'str'>

<class 'int'>

<class 'float'>

Python可以对整型和浮点型数值进行算术运算,Python的算术运算符及其含义和说明如表2.1所示。

表2.1 Python的算术运算符及其含义和说明

运算符

含义

说明

+

加号

两数相加,例如2+3的值为5

-

减号

两数相减,例如2-3的值为-1

*

乘号

两数相乘,例如2*3的值为6

/

除号

两数相除,结果为浮点数,例如3/2的值为1.5

%

取余

两数相除,结果取余数部分,例如5%3的值为2

**

幂运算

ab的值,例如2**3的值为8

//

整除

两数相除,结果仅取整数部分,例如3//2的值为1

( )

圆括号

和数学运算规则一样,圆括号内的表达式优先计算

Python以圆括号代替数学中的方括号和花括号运算符,程序运行时将按由内到外的顺序计算圆括号里表达式的值。例如数学表达式2×{4-[3-(2-9)]},将其转化成Python的表达式为2*(4-(3-(2-9)))。

Python除了圆括号里表达式的计算最优先外,其余运算优先次序如下。

(1)幂运算。

(2)乘法、除法、取余、整除,依照出现顺序运算。

(3)加法、减法,依照出现顺序运算。

例如执行print((5+6)*8-2),输出结果为86。

设计程序时,可以使用下列函数强制转换数据类型。

(1)int():将括号内的内容转换为整型,例如执行print(int (123.45)+2),输出结果是125而不是125.45。

(2)float():将括号内的内容转换为浮点型,例如执行print(float (100)),输出结果是100.0而不是100。

(3)str():将括号内的内容转换为字符串,例如执行print(str (123)+str(456)),输出结果是字符串"123456"而不是579,此时“+”起到连接两个字符串的作用。

字符串和数值的区别如下。

字符串必须用双引号或单引号括起来,例如'abcde'、"12345"等。这类似于我们在书面语言表达中,某人说的话要用双引号括起来。显然,某人说的话可以是中文,可以是英文,可以是数字,可以是各种符号,不需要做任何修改,原封不动地复述出来就好。

数值是不能用双引号和单引号括起来的。所以"12345"和12345是不同类型的数据,Python处理它们的方式也是不一样的。诸如123+456这样的表达,在现实生活中的理解就是数学老师在黑板上写的一个数学表达式,你必须要计算出结果。

了解了以上的知识后,我们使用Visual Python设计一个简单计算器,用来进行复杂的算术运算。

打开Visual Python,设置窗体名称为“简单计算器”,选中控件、控件和控件绘制界面,如图2.2所示。

图2.2

窗体和这些绘制在窗体设计区内的控件都被看作对象(object)。

对象的概念放在现实生活中可以这么理解:我是一个对象,我的计算机是一个对象,面前的桌子是一个对象,家里养的小狗也是一个对象……换言之,目之所及的事物均为对象。

在Python中“万物皆对象”,所以,绘制的输入框、文本框、按钮等均为对象。

Python是面向对象的编程语言,它符合我们的思维习惯,具有很强的灵活性和可扩展性,开发效率很高。

绘制好所有的控件后,我们需要在Visual Python工作界面右侧的控件属性设置面板中设置某些控件的属性,如图2.3所示。使用控件属性设置面板的前提是已选中窗体设计区中的某个控件,否则控件属性设置面板的状态为灰色,表示不可用。

图2.3

属性(attribute)用来描述某个对象的特征,例如小狗是一个对象,它的名字、颜色、大小、年龄、体重等都是它的属性。

对于绘制在窗体设计区的控件来说,它的名称、位置、大小、颜色等是它的属性,可以通过设置它的属性值改变其特征。

不同的控件有不同的属性,但也有一些共有属性,例如每个控件都有一个“控件ID号”属性,而控件箱中的横滚条和纵滚条的“长度”属性是独有的(其他控件对应的属性是“宽度”和“高度”属性)。

如图2.4所示,选中左边第一个按钮(Button1)后,输入“文本”属性的值“清空”后,按Enter键或者单击“OK”按钮确定。同理,设置第二个按钮(Button2)的“文本”属性为“计算”。

图2.4

若希望单击“清空”按钮时,文本框的内容能被清空,单击“计算”按钮时,能计算输入框内数学表达式的值并将结果显示在文本框内,就要用到Python的事件驱动机制。

事件驱动(event driven)放在现实生活中可以这么理解:我对小狗这个对象扔了一个肉包子,扔肉包子的行为就是一个事件,这个事件引起了小狗的反应,驱动小狗对我摇尾巴这样的行为发生。

对于Python来说,就是在控件上发生了一个事件(例如单击该控件、从键盘输入字符到该控件上、鼠标指针移到该控件上等),引起了控件的反应,并为此执行了一段相应的代码。

在Visual Python中,为控件添加事件驱动代码很方便,只需选中相应控件,然后在Visual Python工作界面右下方的控件事件设置面板中单击事件对应的按钮即可。对于窗体设计区内的两个按钮来说,因为需要添加的是单击鼠标左键事件,所以单击“单击鼠标左键事件”标签右边的按钮即可,如图2.5所示。

图2.5

为两个按钮分别添加了单击鼠标左键事件后,单击按钮保存文件。下面我们将在打开的IDLE++中编写代码。

可以看到在IDLE++中显示的代码里,已经添加了Button1和Button2的单击鼠标左键事件的函数。

def Button1_Mouse_Press_1(event):      # Button1的鼠标左键按下事件函数
    print("Button1 的鼠标左键按下了 事件发生")
 
def Button2_Mouse_Press_1(event):      # Button2的鼠标左键按下事件函数
    print("Button2 的鼠标左键按下了 事件发生")

单击按钮运行程序,尝试分别单击按钮,如果能在控制台窗口中输出相应的字符串,则说明两个按钮的事件驱动代码是可以正常运行的,如图2.6所示。稍后只需要将输出语句替换为我们自己写的代码即可。

图2.6

要实现的代码逻辑关系如图2.7所示。

图2.7

替换后的代码如下(如果有Init()函数的动画示例代码,将其全部删除)。

def Button1_Mouse_Press_1(event):     # “清空”按钮的单击事件
    Text1.delete('1.0','end')
 
def Button2_Mouse_Press_1(event):     # “计算”按钮的单击事件
    Text1.insert('end',str(Entry1.get())+'='+str(eval(Entry1.get()))+'\n')
    Entry1.delete(0,'end')

Text1.delete('1.0','end')表示将文本框Text1里显示的内容全部删除。

Entry1.delete(0, 'end')表示将输入框Entry1里显示的内容全部删除。

Text1.insert('end',str(Entry1.get())+'='+str(eval(Entry1.get()))+'\n')表示在文本框Text1的末尾处插入str(Entry1.get())+'=' +str(eval(Entry1.get()))+'\n'字符串,其中Entry1.get()用于获取输入框Entry1里的数学表达式,eval()将括号内的字符串当成有效的表达式来求值并返回计算结果。

字符'\n'表示换行输出。

举例来说,小狗除了名字、颜色、大小、年龄、体重等属性外,它还有一些行为,例如,它会汪汪叫,它会摇尾巴,它会作揖……

在Python里,这些行为称作方法(method)。

对于控件来说,如Text1,它有什么方法呢?显然,delete()和insert()都是它的方法。

于是可以得出一个结论:对象=属性+方法。

代码替换完毕后单击按钮保存,再单击按钮运行。

在输入框中输入一个四则运算数学表达式,如图2.8所示。注意,输入的字符均为半角。

图2.8

单击“计算”按钮,表达式的计算结果将显示在文本框内,同时输入框的内容被清空,便于下一个数学表达式的输入,如图2.9所示。

图2.9

【实践1】使用简单计算器计算以下数学表达式的值。

(1)(1234+2)-3*4/5%100

(2)123**123

(3)(((((1+2)*3+4)*5+6)*7+8)*9+10)+11

实践2】将Text1.insert('end',str(Entry1.get())+'='+str(eval(Entry1.get()))+'\n')中的“end”替换为“1.0”,即Text1.insert('1.0',str(Entry1.get())+'='+str(eval(Entry1.get()))+'\n'),替换后运行程序并观察运行结果,试回答'end'和'1.0'的作用是什么。

【实践3】试考虑要实现在Text1中每输出一行计算结果后空一行,代码应该怎么修改。

之前完成的简单计算器使用起来有些不方便,因为在输入框中输入数学表达式后,必须单击“计算”按钮才开始计算。更便捷的操作是在输入框中输入数学表达式后,按下Enter键即输出计算结果。这显然需要给某个控件再添加一个事件驱动,应该给哪个控件添加事件驱动?添加的应该是什么事件驱动?事件驱动添加后的代码应该怎么写?

(提示:在Visual Python中,为控件添加新的事件驱动后,单击按钮,重新生成的文件名如果和原文件名相同,会在原文件的代码基础上添加新增的代码。)

执行简单的Python代码,也可以在IDLE++的控制台窗口(Shell)里进行数学表达式的运算,方法是单击IDLE++中的快捷按钮,打开控制台窗口,如图2.10所示。

图2.10

从图中可以看到,控制台窗口里显示了一些参考信息,最后一行出现了提示符“>>>”,它的含义是Python已经准备好了,可以输入Python语句。

输入100//3后按Enter键,控制台窗口会输出该表达式的结果33,如图2.11所示。

图2.11

输入print(100*1000)后的运行结果如图2.12所示。

图2.12

 试输入print("100*1000")并执行,思考输出结果为什么和执行print(100*1000)的输出结果不一样。

 执行print("2的16次方为"+2**16)语句会报错,而执行print("2的16次方为"+str(2**16))语句的输出结果是正确的,请思考为什么。

 试用自己的理解回答对象、属性、方法和事件驱动的含义。

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e58443”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

相关图书

Python极客项目编程(第2版)
Python极客项目编程(第2版)
动手学自然语言处理
动手学自然语言处理
Python财务应用编程
Python财务应用编程
深度学习的数学——使用Python语言
深度学习的数学——使用Python语言
Web应用安全
Web应用安全
Python自动化测试教程
Python自动化测试教程

相关文章

相关课程