白季飞龙的个人主页

面向聪明小白的编程入门教程 熟悉Python(Part 4)

经过之前的热身,我们已经大概了解了编程是怎么回事。接下来,我们就动手写一个最简单的空窗体应用程序吧。

1. 了解IDE

之前的教程中,我们安装了Notepad ++Visual Studio CodeNodepad ++是一个小巧的文本编辑器,Visual Studio Code是一个全能型文本编辑器,算是大半个IDE吧。

IDE(Integrated Development Environment),一般译为集成开发环境,可以理解为开发过程中需要的工具组合。软件开发中,IDE并不是不可或缺的,毕竟IDE也是被开发出来的。

IDE一般提供这些功能:代码编辑、代码搜索、代码分析、代码执行、代码调试、版本控制(用于代码修改历史的追溯)、项目管理(软件写到后期,可能需要将单个文件拆解成多个文件,不然巨无霸的代码难以阅读)、代码重构(一键更改代码风格)、项目部署(应用打包)等。

对于我们一百行代码的小项目来说,一般只能用到IDE中很少的一部分功能:代码编辑、代码执行、代码调试。其中代码编辑,又包括代码高亮、智能补全、智能纠错、码品分析等。

我们的项目只有一百行代码,用得着IDE吗?其实用不用IDE,跟代码行数无关。一个智能的IDE,是学习编程最好的老师。在一个智能的IDE里,每敲入一个字符,IDE就会根据上下文给出他的建议、提示或报警。在一次次的互动中,我们慢慢学会了规避常见的错误、选择最佳的语法、写出最整齐的代码。有些教程教新手使用文本编辑器编程,甚至用记事本编程,简直是误人子弟。

2. 选择IDE

现代的IDE,主要有微软公司的Visual Studio,苹果公司的XCode,IBM公司的Eclipse,甲骨文公司的Netbeans和Jebrains公司的IntelliJ IDEA。这些IDE主要都不是做Python开发的,但是理论上,他们都可以通过插件集成Python开发。

这五个IDE中,Visual Studio原来是收费的,现在不要钱了。XCode不要钱,但是是苹果机专用。EclipseNetbeans一直是免费软件。到现在为止,只有IntelliJ IDEA是收费的IDE。

IntelliJ IDEA来自捷克的Jetbrains公司。这家公司的主营业务就是IDE。术业有专攻,这家公司做IDE的技术应该是宇宙第一。用这个IDE,经常能惊喜地发现它提供的某个功能,正是自己需要的,但自己之前根本没意识到自己有这个需要(像是乔布斯做的产品,帮用户想需求)。

IntelliJ IDEA可以安装Python插件,以支持Python开发。但是,Jetbrains也提供了IntelliJ IDEA的缩水版PyCharm,内置支持了Python开发,IDE售价也便宜了许多。不过,对于我这种没有版权意识的低素质人来说,也没啥感觉。

PyCharm分两个版本,一种是专业版,按年收费,每年三五百块钱吧。一种是社区版,免费使用,但是功能有缩水。低素质人用软件只用旗舰版,我也没去了解到底缩水了哪些功能。

为了不错过任何有意思的功能,我们直接选择PyCharm专业版。PyCharm专业版虽然收费,但是也提供了30天全功能不骚扰的免费试用。如果30天后我们学Python的热度还没褪尽,再研究破解(或者直接用免费版)不迟。

使用Chocolatey安装PyCharm: choco install pycharm

3. 使用PyCharm

对于小的Python脚本来说,无所谓项目不项目的概念。直接新建一个空的.py文件,用PyCharm打开即可运行。但是,做软件最好把源代码单独放一个目录里头,这样也方便后期扩展或是添加文档。

按业界惯例,编写的第一个计算机程序,应该起名叫HelloWorld。

在桌面上Shift右键,打开命令行窗口,输入命令mkdir helloworld && cd helloworld && echo>app.py && explorer .。这条命令是四条命令的组合,这四条命令的意思分别是:

  1. mkdir helloworld 创建文件夹(MaKeDIRectory)helloworld
  2. cd helloworld 切换目录(ChangeDirectory)到helloworld
  3. echo>app.py 发送空白文本到app.py,用作创建空文件
  4. explorer . 在我的电脑中打开当前目录(helloworld)

此时,应该能看到新创建的Python空文件app.py。以上操作都可以通过鼠标键盘操作完成,但是命令行也是程序员吃饭的看家本领,多学点没有坏处。

打开PyCharm,选择File -> Open,打开桌面上的helloworld文件夹。双击左边文件夹树下的app.py,进入代码编辑。

在编辑界面输入print("Hello World"),然后在代码区域用鼠标右键调出菜单,左键选择Run app。如无意外,PyCharm会开启一个停靠在底部的控制台窗口,输出"Hello World"。

在原来的控制台窗口中,打python app.py,应该也能看到"Hello World"的输出。

PyCharm比较重要的几个快捷键:

4. HelloWorld

但是,这个HelloWorld仅仅是一个控制台版的HelloWorld。我们要做的是一个带窗口的HelloWorld。

from PyQt5.Qt import QApplication, QWidget  # 从PyQt5的Qt包中导入QApplication和QWidget

app = QApplication([])  # 创建Qt应用程序,起名为app
wnd = QWidget()  # 创建一个窗体,起名为wnd
wnd.setWindowTitle("Hello World")  # 设置窗体标题为"Hello World"
wnd.show()  # 显示这个窗体 在Qt中,新创建的窗体默认不显示
app.exec()  # 执行Qt应用程序,一直接受与处理用户的键盘鼠标等事件,知道窗体被关闭,应用被退出

复制以上代码到app.py,右键运行此程序,应该可以看到一个空窗体显示出来,窗体标题是“Hello World”

5. HelloWorld代码分析

5.1 from PyQt5.Qt import QApplication, QWidget

从PyQt5的Qt子模块中导入QApplication和QWidget。PyQt5是一个图形模块,我们借助这个模块来绘制窗体。Qt是这个模块的子模块,父子模块用"."符号连接。from ... import ...即从...导入...。导入的多个项目之间,用逗号隔开。在Python中,如果要使用外部模块,必须先导入。这样这些符号才能在程序中被识别。

PyQt5这个框架(模块、包)的底层是Qt5,一个使用C++语言编写的图形界面框架。PyQt5是对Qt5这个框架使用Python语言的封装。因此,Qt5的相关资料也适用于PyQt5

5.2 app = QApplication([])

创建Qt应用程序,起名为app。这句代码之前有个空行。Python一般无视空行、空格、制表符等空白符号。这些空白符号是为了对齐代码、方便阅读用的。

如果要用PyQt5创建窗体,必须先创建一个Qt应用。函数名(...)这种形式,在Python中叫函数调用。所谓函数,就是一段可以重复利用的代码,函数名就是给这段代码起的名字。我们给他一个输入,他处理后给我们一个输出。比如输入1,输出"奇数",输入2,输出"偶数"。这个处理过程是任意的,可以执行任意代码,做任意的事。

QApplication([])即调用名字为QApplication的函数,小括号中是函数的参数(输入)。这个函数要求的输入格式是一个列表(可以存放0个、1个或任意多个元素的数据结构),列表使用方括号表示,里面的各元素用逗号隔开,[]表示空列表。QApplication这个函数的参数我们目前不关心,但是函数的定义中这个参数是必选项,所以使用空列表。

QApplication这个函数运行成功后,返回一个代表Qt应用程序的对象。因为之后需要引用这个对象,所以需要给他一个名字。name = value这种语法,称为赋值语句,即用name表示这个value

5.3 wnd = QWidget()

创建一个窗体,起名为wnd。此处创建的一个窗体,只是在内存中创建的一个在程序逻辑上代表窗体的区域,并不是真正的屏幕上显示的窗体。此处QWidget也是一个函数,输入为空,输出(返回)一个空窗体对象。

5.4 wnd.setWindowTitle("Hello World")

默认的窗体的标题栏是空白的。如果要修改标题栏,需要调用窗体的setWindowTitle函数。括号中的参数是一个字符串(一个字符序列,因为字符序列中什么字符都可能有,可能会和其他代码发生冲突,因此必须要用引号来定界),调用这个函数后,窗体的标题就会更新为这个字符串。

5.5 wnd.show()

显示窗体。实际上调用此代码后,并不会马上显示窗体。因为此时Qt应用还没有执行,不可能会有窗体的显示。这个函数(方法)的真正作用是标记,标记这个窗口需要被显示。因为在Qt中,窗体的默认状态是隐藏。

5.6 app.exec()

运行Qt应用。等待用户对窗体的操作,并作出正确的反馈。比如,点击关闭按钮,会关闭窗体,退出应用。理论上,如果没有意外情况的话,这个函数是一个永远运行不会结束的函数。因为这个函数要保证只要系统不关机,用户不退出应用,应用的窗体就要一直显示,而且永远能响应用户的点击和拖拽等事件。

6. 该系统地学习一下Python了

我不做小白很多年,已经几乎忘了小白是怎么思考问题的。但是上一小节直接冒出了6行功能各异的代码,我觉得再怎么解释给小白听,小白都是要蒙逼的。所以,是时候来稍微系统地学一遍Python了。

作为过来人,我给小白们几点忠告:

  1. 别指望一遍就学会,这是不可能的,碰到想不明白的问题就囫囵吞枣直接跳过,以后慢慢体会吧
  2. 别只看一个人的教程,要多看看其他人是怎么讲的。每个人都有自己的局限性,多听听各方的解释,更容易学明白
  3. 别老盯着第一章看,要学会适当地跳读,别在没什么营养的地方浪费时间
  4. 一定要多动手,一个字符一个字符地跟着敲,哪怕完全搞不懂,也先混个手熟
  5. 不要怕程序报错。程序报错越多(种类),人进步越快。碰到报错要仔细阅读报错信息,分析出错原因
  6. 碰到不懂的名词,多查百科,大略浏览一下,先让大脑对这个东西有个概念
  7. 多改代码,就算教程没提到,对同一个函数,也要多试试不同的参数,看看不同参数对程序的影响
  8. 不要保留没用的代码,要多尝试,确保每一行代码、每一个字符都是不可或缺,不要被无用的代码所羁绊
  9. 眼观六路,耳听八方,对顺便扫到的各种函数要多尝试,多猜测,多揣摩设计者的意图
  10. 用好IDE,IDE的忠告都是有价值的,不要忽略它
  11. 不要为了学而学,编程是为了解决问题的,可以自己想出一些有趣的点子,自己写代码去实现
  12. 不要强迫自己学不敢兴趣的东西,大概了解一些语法后,再以需求出发,层层倒推,步步逼近
  13. 善用搜索引擎,碰到问题先推理,搞不定的话再搜索

最最重要的一点,我的教程只是提供一些思路和方法,很多知识点可能有意无意会被漏掉,或解释不清。只看我的教程,一定会看懵的!!!

编程语言的语法,比较杂,比较碎,我也不知道从何教起。因此,推荐几个学习资料,方便读者学习参考。

  1. 极简Python教程 可能不太适合小白入门,但是可作为快速参考。
  2. 用搜索引擎搜索Python入门Python教程或者Python tutorial,多挑几个教程,选择能看明白的。
  3. 哔哩哔哩上搜索Python,有大量入门教程,自己挑选。

文章首发: https://baijifeilong.github.io


漫漫路,莫论逍遥;潜心修,只为悟道