房与图形界面编程之道

本篇属于【州的先生在线教程】中《一看就懂的Python图形界面开发:PyQt5/PySide2》中的第一篇内容《通俗理解图形界面开发》,更完整的内容请前往《一看就懂的Python图形界面开发:PyQt5/PySide2》 进行学习。

从本章起,我们开始一起学习利用PyQt5/PySide2进行Python的图形界面开发。

为了让大家能够比较平缓地进行学习,我们先来通俗地理解一下图形界面的开发。

这一章,没有模块的安装、使用和介绍,纯粹地讲解一下通俗概念下的桌面程序的图形界面开发,让大家对于后面的章节能够快速理解、灵活学习和运用。

一、房子与桌面程序

房子,对于大家而言都不陌生。不管大家买不买得起房,反正都是有房子可供居住的。

如果有一天,你想买房了,那么有两个选择:新房和二手房。

  • 新房,通常来说多是毛坯房,也有部分的精装修;
  • 二手房,通常来说多是装修好之后可拎包入住的房子,当然也有部分的毛坯房。

为了便于对比,我们在此默认将新房等价于毛坯房,二手房等价于装修好的房子;

如果要买新房,那么就从从头开始操心装修的各种事情,包括但不限于水电安装、装修风格的确定、装修材料(瓷砖、地板、墙漆等)的购置、家具的购置等。如果想图省心,可以找一个装修公司进行托管。等到装修完成能够入住,大概是大半年之后的事情了。

如果要买二手房,那么就剩下了各种装修的时间和花费,布置一下家具,即可入住。当然,如果对这个房子的原有装修风格不满意,还是需要进行二次装修。

等一下!

我们要进行图形界面开发的学习,为什么要扯上新房和二手房。

有没有发现,这两者之间看似毫不相干,其实内在的联系和逻辑是相同的。

如果我们去GitHub或开源中国上找一个开源的图形界面程序来使用或进行二次开发,是否类似于我们购买了二手房的后续操作。

如果我们从头进行图形界面开发编写一个桌面程序,是否也就类似于我们买了一个毛坯房之后,操心各种装修的事情。

州的先生不扯什么“大道至简”、“万事万物都是有联系的”之类的哲学鬼话,用已认知事物去比喻和套用未知事物,是快速理解和熟悉一个未知事物的途径。或许两者或多或少有差异,但是这能方便和快速地让我们架构其图形界面开发和内在逻辑,帮助我们快速掌握。

二、房屋布局与程序布局

布局的作用在于用规划和设定的范围,来实现功能的分隔,便于人们快速熟悉所面对的场景。

譬如,房屋的布局中会设计为阳台、客厅、卧室、卫生间、餐厅、厨房等。

相应的,程序的布局中会设计菜单栏、内容栏、按钮操作栏、结果输出栏等等。

布局用于规范一定空间范围内各个区域的功能,准确地让设计者和使用者理解各个区域的功能,便于后期使用与维护。

如果我们抛却了布局,那么房子中餐厅和卫生间可能堆在了一起,客厅和卧室也连在了一块。而对于桌面程序而言,所有按钮、输入框、输出框没有层次分隔,无疑会严重降低使用友好度。

进入更小的布局来看,卧室里面的布局规范了床的位置、衣柜的位置、梳妆台的位置等等,这就显著避免了我们去衣柜里面找化妆品、去梳妆台找睡觉以及在床上化妆等。同样的,一个桌面程序的多选按钮肯定需要在一个组里面,而不是穿插在几个文本输入框之间。

三、水电网与事件响应

想象一下,如果你买了一个电风扇,如果需要它能够运转,单单去按电风扇的开关是不够的,因为我们首先需要将其插头连接在插座上;

如果我们为房子配置了一台电脑,如果需要它能够上网,不仅需要房间接入了宽带或是无线网络,也还需要有线或无线连接上网络才行;

如果我们的洗漱台安装好了,要想打开水龙头就有水流出来,自然还需要水龙头是连接到了房子的水网之中的。

上面所说的例子中,电风扇、电脑和水龙头,都属于房子里面的器物;

而打开电风扇、在电脑中打开浏览器以及拧开水龙头,则属于对器物进行的一个事件;

电风扇吹出风来,电脑浏览器能够打开互联网网站,水龙头流出水来,则是器物对事件的响应。

在桌面程序中,也存在这样的器物、事件和响应。

比如一个按钮控件,它是一个器物;

它能够点击,这是属于它的事件;

点击它之后后台代码开始运行了,这属于它对点击事件的响应。

当然它可能不会知道在被点击之后要运行后台代码,这需要我们对它的点击事件和后台代码运行的响应进行连接(或者说进行绑定),就像把电风扇接上电、水龙头接入管网一样。

能够对用户的操作产生相应的响应,是一个合格的桌面图形界面程序应该具备的最基础功能最核心的功能。

而一些默认的程序控件,可能会自带对事件的响应,比如我们不用定义点击关闭按钮的事件,点击关闭按钮时程序也会被关闭;

就像我们为房子安装了一个防盗门,默认已经带了锁和钥匙了,就不需要再设计一个锁,打造一个钥匙,当钥匙如何匹配的时候,锁才能打开等等。

四、装修风格与程序样式

每个人都有不同的审美,放在房子上,有的人喜欢中式、有的人喜欢欧式、有的人喜欢简约一点,有的人就要金碧辉煌,审美多样,但是有一点是相同的,就是肯定不能住毛坯房。

而在桌面程序上,可能情况有那么一点点差异,各种图形界面开发套件和模块提供了默认样式的界面,这个界面,不会很好看,但也能用,就像是毛坯房简简单单地铺上瓷砖刷了墙漆一样,下图为使用PyQt5编写的一个图形界面的默认样式:

对默认样式不满足的,就可以借助各个模块提供的属性进行各种样式的自定义美化了,下图为使用PyQt5编写的一个图形界面的美化样式:

五、特殊装饰与高级控件

绝大多数普通的房子,都会有卧室、客厅、厨房、卫生间等结构和空间。

如果你土豪一点,购买了一栋包含小院子的别墅,那么你可能有机会在院子里面开辟一块花圃种种花草或者挖一个小池塘养养鱼。

如果你的院子够大,那么建一个运动场或是挖一个游泳池也是可以的。

这些就属于脱离一般房屋属性结构的特殊功能装饰了。

进行图形界面开发,有很多种方案,每一个方案出自于不同的技术栈,其对于基本图形界面功能的实现或许都差不多,但基于各种限制,一些很高级或封装程度很高的控件功能则不是每一个方案都能实现。

这就需要大家在选择图形界面开发方案的时候,要考虑好特殊的功能需求。比如如果你想在图形界面程序中调用浏览器组件,那么Python默认的图形界面开发库Tkinter就没有这个功能实现,PyQt5/PySide2就更加适合。

六、家具电器与界面控件

房子里面布置得最多的东西,就是家具电器;而图形界面开发里面涉及最多的,就是控件。

家具就像是图形界面开发中的控件,而控件亦似房屋中的家具。

一件家具电器,有其属性,比如大小、颜色、功率等等;也有其功能(方法),比如净水器(控件),一般布置于厨房(布局),接受自来水(参数),返回纯净水(返回结果);比如抽湿机,一般放置在室内,指定从进风口接受空气,然后从出风口返回除湿后的空气。

图形界面开发中的控件,也有其属性和方法(功能),比如一个按钮,有其长度和宽度,有其文本的默认内容;也有其功能,比如设置按钮的大小,设置显示的文本内容,等等。

七、最后

拿房子和图形界面开发做了那么多的对比和比喻,也就是为了让大家在接下来的章节中,不要死记硬背每个功能、模块、控件的属性、方法和用法,理解其构造,在面对没有使用过的模块时,也能举一反三、快速运用。

猜你也喜欢

发表评论

电子邮件地址不会被公开。