python-GUI编程

说明:本篇主要是从https://www.bilibili.com/video/BV1mg4y1p74P?spm_id_from=333.788.player.switch&vd_source=b6780e06031ac609460f6fbf017bbb39&p=14 这里学习后整理而得的。致敬原创。感谢原创。

一、什么是GUI编程?

我们想象中的软件至少得有一个界面展示,Graphical User Interface,图形化用户接口,简称GUI,就是会有一个图形化的界面展示给用户,用户可以通过这个界面,用鼠标点点点就可以变成代码指令来实现其功能,而不需要用户亲自去敲代码指令来实现相应的功能。我们开发这样的界面就叫GUI编程,也就是图形界面开发

补充:什么是接口
接口又叫api。我举个例子来说明吧,比如前端(比如网页、ios上的app、安卓的app等都叫前端)和后端交互的入口。前端的数据是从后台服务器上获得的。那后台怎么给前端数据?前端传递给后台比如xxx地址?a=1b=2参数,后台看到后就把对应的数据传递给前端了。所以是后台预先定义一些数据传递的规范,前端按照这个规范请求,后端就把前端的请求数据送给前端。所以我们写网页或者写移动端的app时,我只需要按照固定的格式或者固定的地址和固定的参数去访问后端,我就可以获得我想要的数据。这部分内容现在已经可以通过flask框架轻松实现,可以参考我前面的博文:https://blog.csdn.net/friday1203/article/details/139511886

二、python-GUI学什么?

目前比较流行的GUI编程是Qt框架,所以本篇讲PyQt5。
Qt是一个跨平台的C++ 框架,用于构建桌面应用程序。
PyQt5的底层就是Qt,是Python的图形用户界面(GUI)框架,或者说PyQt5就是用python把Qt的全部接口又重新写了一遍而成的。

从代码上看,我们就是要学习PyQt5库的这些模块:

三、环境搭建

既然我们用的是PyQT5,那开发环境自然是python,编辑器我们用VSCode。至于如何安装python,以及如何创建虚拟环境、如何安装和使用VSCode,如果你认真看过我前面的博文,这里就是pip install PyQT5这么简单了:

和flask框架一样,pip一键安装完毕就可以使用了。

四、PyQt5程序基本结构

上图就是代码开发的结构,我们一般都是先把ABD写完,就是代码框架搭建完毕了,然后根据业务需求写C部分的代码。
下面我把上图中的重点代码详细解读一下:

1、sys模块
sys模块是与python解释器交互的系统级工具,主要处理比如命令行参数、程序终止和系统配置等方面的功能。上图代码用到sys模块的只有第1、4、12行,下面我用代码直观展示一下这三行代码的作用:

2、用户程序对象:app = QApplication(sys.argv)

3、小结
上面的拆解可能有点啰嗦,简单讲就是:当程序执行到B时,就创建了PyQt应用程序对象app,->然后执行控件操作C,->然后执行D中的app.exec_(),而app.exec_()是一个死循环,循环的是C,循环C的同时监控鼠标和键盘的用户事件,一旦监测到比如用户点击x了,app.exec_()就返回正常退出码,sys.exit()接收到退出码退出app应用程序。

上面是从代码架构层面的解读,下面我从执行逻辑层面再重复一遍:

五、控件操作中的两个重要概念:顶层控件、非顶层控件

控件操作就是上面的C部分代码,包括控件的创建设置展示事件和信号的处理(主要就是根据业务逻辑来设置了)。
在控件操作前,我们首先得了解什么是顶层控件和非顶层控件,这里是你理解Qt框架底层原理的核心之一:
1、顶层控件示例

可见,不管是按钮、文本框,还是窗口本身,它们都是“控件”。
如果你仅仅单独创建了一个控件,那这个控件就是顶层控件。上面3个示例中的控件都是顶层控件。顶层控件默认是有一个窗口的,而且窗口会有一些装饰(比如有标题栏,有x - 口等),这些都是系统自带的,当然你也可以自己去设置标题、图标等。

2、非顶层控件示例
一个控件就是一个容器,就是可以在这个控件上面继续创建其他控件。那么顶层控件就是父控件,在父控件上的控件就是子控件
顶层控件有系统默认的装饰,非顶层控件就没有。

可见,创建子控件时,只要把其父控件对象当做参数传入子控件即可。

六、面向对象编程

一提到面向对象编程几个字,官方的腔调就是面向对象编程是一种以对象为核心的编程范式,它通过封装、继承和多态三大特性来组织代码。其实简单理解就是你要善于将很多东西打包成一个。就是写成类的形式就是面向对象编程。

下面展示一个例子:把多个控件打包成一个类,直观感受一下类的效果:

多个界面都有相同结构的控件组时,我们把相同的控件组打包成一个,到时只要实例化类就可以完成控件组的创建工作,岂不是很省力,不用一个个界面的费力开发了。上图的例子中,每个界面都有两个按钮“是”、“不是”,我就可以把这两个按钮打包成一个类。

如果你觉得上述打包方式还不够灵活,试试下面这种方式:

所以在Qt中很多东西都是打包成类的形式,因为这样做不仅方便,更重要的是类还可以继承、可以多态、可以随时重载、可以重写,等等底层特性,这样就非常方便你个性化设置,方便你想改哪儿就改哪儿,比如你觉得这个边框颜色不好看,我想换个颜色,那你只需要继承父类后,重写父类中关于边框的方法即可。这些我们后面讲控件时我会展开讲一些相关细节部分。

这部分内容我是默认你非常理解什么是继承、多态、重载、重写这些底层概念的,如果这些概念你不理解,后面你就非常难懂我在干什么。这部分内容你可以参考我的C++语法系列中的博文:https://blog.csdn.net/friday1203/article/details/139986081
优秀的编程语言的底层逻辑都是相似的,可谓优秀的作品如出一辙,糟糕的东西千奇百怪,所以python语法中也有相关概念,可以通过我这篇博文去查找相关知识点:https://blog.csdn.net/friday1203/article/details/138354754

七、认识常用控件

没必要重复造轮子嘛,现在很多控件都被打包得非常完美了,我们只需要认识它,然后调用它即可。所以如何实现一个你心目中想要的界面,你首先得了解各个控件的样子,这样你才能拿来为我所用:

1、按钮类别的控件

2、输入控件
输入控件主要是用来接收用户的输入信息的。
(1)纯键盘输入

(2)步长调节:既可以通过键盘操作,也可以通过鼠标操作

3、展示控件
展示一些内容给用户看的:

4、容器控件
容器控件是用来承载其他控件的:

5、结构控件

6、滚动控件

7、辅助控件

8、其他

这些常用的控件你熟悉后,当你拿到一个界面,你就知道实现这个界面需要哪些控件,你调包这些控件对应的类即可实现。

鉴于篇幅,本篇到此为止。欲知更多内容请看:https://blog.csdn.net/friday1203/article/details/153412704?spm=1001.2014.3001.5502

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐