经过之前的热身,我们已经大概了解了编程是怎么回事。接下来,我们就动手写一个最简单的空窗体应用程序吧。
之前的教程中,我们安装了Notepad ++
和Visual Studio Code
。Nodepad ++
是一个小巧的文本编辑器,Visual Studio Code
是一个全能型文本编辑器,算是大半个IDE吧。
IDE(Integrated Development Environment),一般译为集成开发环境,可以理解为开发过程中需要的工具组合。软件开发中,IDE并不是不可或缺的,毕竟IDE也是被开发出来的。
IDE一般提供这些功能:代码编辑、代码搜索、代码分析、代码执行、代码调试、版本控制(用于代码修改历史的追溯)、项目管理(软件写到后期,可能需要将单个文件拆解成多个文件,不然巨无霸的代码难以阅读)、代码重构(一键更改代码风格)、项目部署(应用打包)等。
对于我们一百行代码的小项目来说,一般只能用到IDE中很少的一部分功能:代码编辑、代码执行、代码调试。其中代码编辑,又包括代码高亮、智能补全、智能纠错、码品分析等。
我们的项目只有一百行代码,用得着IDE吗?其实用不用IDE,跟代码行数无关。一个智能的IDE,是学习编程最好的老师。在一个智能的IDE里,每敲入一个字符,IDE就会根据上下文给出他的建议、提示或报警。在一次次的互动中,我们慢慢学会了规避常见的错误、选择最佳的语法、写出最整齐的代码。有些教程教新手使用文本编辑器编程,甚至用记事本编程,简直是误人子弟。
现代的IDE,主要有微软公司的Visual Studio
,苹果公司的XCode
,IBM公司的Eclipse
,甲骨文公司的Netbeans
和Jebrains公司的IntelliJ IDEA
。这些IDE主要都不是做Python开发的,但是理论上,他们都可以通过插件集成Python开发。
这五个IDE中,Visual Studio
原来是收费的,现在不要钱了。XCode
不要钱,但是是苹果机专用。Eclipse
、Netbeans
一直是免费软件。到现在为止,只有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
对于小的Python脚本来说,无所谓项目不项目的概念。直接新建一个空的.py
文件,用PyCharm
打开即可运行。但是,做软件最好把源代码单独放一个目录里头,这样也方便后期扩展或是添加文档。
按业界惯例,编写的第一个计算机程序,应该起名叫HelloWorld。
在桌面上Shift右键,打开命令行窗口,输入命令mkdir helloworld && cd helloworld && echo>app.py && explorer .
。这条命令是四条命令的组合,这四条命令的意思分别是:
mkdir helloworld
创建文件夹(MaKeDIRectory)helloworldcd helloworld
切换目录(ChangeDirectory)到helloworldecho>app.py
发送空白文本到app.py
,用作创建空文件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
比较重要的几个快捷键:
Ctrl + 鼠标左键
可见跳到符号(变量、方法、类)的定义处Ctrl + Alt + 左箭头
可以跳到光标上次停留的地方Ctrl + Alt + L
格式化代码但是,这个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”
from PyQt5.Qt import QApplication, QWidget
从PyQt5的Qt子模块中导入QApplication和QWidget。PyQt5是一个图形模块,我们借助这个模块来绘制窗体。Qt是这个模块的子模块,父子模块用"."符号连接。from ... import ...
即从...导入...。导入的多个项目之间,用逗号隔开。在Python中,如果要使用外部模块,必须先导入。这样这些符号才能在程序中被识别。
PyQt5这个框架(模块、包)的底层是Qt5
,一个使用C++
语言编写的图形界面框架。PyQt5是对Qt5这个框架使用Python语言的封装。因此,Qt5的相关资料也适用于PyQt5
。
app = QApplication([])
创建Qt应用程序,起名为app。这句代码之前有个空行。Python一般无视空行、空格、制表符等空白符号。这些空白符号是为了对齐代码、方便阅读用的。
如果要用PyQt5
创建窗体,必须先创建一个Qt应用。函数名(...)
这种形式,在Python中叫函数调用。所谓函数,就是一段可以重复利用的代码,函数名就是给这段代码起的名字。我们给他一个输入,他处理后给我们一个输出。比如输入1,输出"奇数",输入2,输出"偶数"。这个处理过程是任意的,可以执行任意代码,做任意的事。
QApplication([])
即调用名字为QApplication
的函数,小括号中是函数的参数(输入)。这个函数要求的输入格式是一个列表(可以存放0个、1个或任意多个元素的数据结构),列表使用方括号表示,里面的各元素用逗号隔开,[]
表示空列表。QApplication
这个函数的参数我们目前不关心,但是函数的定义中这个参数是必选项,所以使用空列表。
QApplication
这个函数运行成功后,返回一个代表Qt应用程序的对象。因为之后需要引用这个对象,所以需要给他一个名字。name = value
这种语法,称为赋值语句,即用name
表示这个value
。
创建一个窗体,起名为wnd。此处创建的一个窗体,只是在内存中创建的一个在程序逻辑上代表窗体的区域,并不是真正的屏幕上显示的窗体。此处QWidget
也是一个函数,输入为空,输出(返回)一个空窗体对象。
默认的窗体的标题栏是空白的。如果要修改标题栏,需要调用窗体的setWindowTitle
函数。括号中的参数是一个字符串(一个字符序列,因为字符序列中什么字符都可能有,可能会和其他代码发生冲突,因此必须要用引号来定界),调用这个函数后,窗体的标题就会更新为这个字符串。
显示窗体。实际上调用此代码后,并不会马上显示窗体。因为此时Qt应用还没有执行,不可能会有窗体的显示。这个函数(方法)的真正作用是标记,标记这个窗口需要被显示。因为在Qt中,窗体的默认状态是隐藏。
运行Qt应用。等待用户对窗体的操作,并作出正确的反馈。比如,点击关闭按钮,会关闭窗体,退出应用。理论上,如果没有意外情况的话,这个函数是一个永远运行不会结束的函数。因为这个函数要保证只要系统不关机,用户不退出应用,应用的窗体就要一直显示,而且永远能响应用户的点击和拖拽等事件。
我不做小白很多年,已经几乎忘了小白是怎么思考问题的。但是上一小节直接冒出了6行功能各异的代码,我觉得再怎么解释给小白听,小白都是要蒙逼的。所以,是时候来稍微系统地学一遍Python了。
作为过来人,我给小白们几点忠告:
最最重要的一点,我的教程只是提供一些思路和方法,很多知识点可能有意无意会被漏掉,或解释不清。只看我的教程,一定会看懵的!!!
编程语言的语法,比较杂,比较碎,我也不知道从何教起。因此,推荐几个学习资料,方便读者学习参考。
Python入门
、Python教程
或者Python tutorial
,多挑几个教程,选择能看明白的。Python
,有大量入门教程,自己挑选。