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)

上面的拆解可能有点啰嗦,简单讲就是:当程序执行到B时,就创建了PyQt应用程序对象app,->然后执行控件操作C,->然后执行D中的app.exec_(),而app.exec_()是一个死循环,循环的是C,循环C的同时监控鼠标和键盘的用户事件,一旦监测到比如用户点击x了,app.exec_()就返回正常退出码,sys.exit()接收到退出码退出app应用程序。
五、控件操作
就是上面的C部分代码,包括控件的创建 、设置 、展示 、事件和信号的处理 (主要就是根据业务逻辑来设置了)。
1、顶层控件示例

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

可见,创建子控件 时,只要把其父控件对象 当做参数传入子控件即可。
3、把多个控件打包成一个类:面向对象编程
当多个界面 都有相同结构的控件组 时,我们把相同的控件组打包成一个类,到时只要实例化类就可以完成控件组的创建工作,岂不是很省力,不用一个个界面的费力开发了。比如我每个界面都有两个按钮"是"、"不是",我就可以把这两个按钮打包成一个类:

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

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

1、按钮类别的控件

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

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



待续。。。