本书既是介绍PyQt5的快速入门书籍,也是介绍PyQt5实战应用的书籍。PyQt5是对Qt所有类的Python封装,即可以利用Qt的强大功能,也可以利用Python丰富的生态,同时能够结合Python简洁的语法进行操作,其结果就是使用PyQt5可以高效简单地开发出自己想要的程序。本书内容丰富,对PyQt5基础知识的介绍比较全面,同时对新手使用PyQt5的一些重点难点都有专门的章节进行针对性分析,还重点介绍了如何把Python的一些重量级模块(Pandas、Matplotlib和Plotly)嵌入到PyQt5中,从而极大地节约开发时间。*后,本书会给出一些综合性较强的实战案例,帮助读者快速掌握PyQt5的实战应用。总而言之,本书旨在帮助读者以*短的时间掌握PyQt5的基础知识并能够实战应用,希望本书对有Python程序开发需求的读者有帮助。
前 言
Python可以说是世界上最广泛、最简单的编程语言之一,Qt可以说是世界上最好的程序开发库之一。Python与Qt结合的产物就是PyQt,因此,PyQt就成了Python中程序开发最棒的库之一(当然,笔者认为它在Python程序开发中就是最棒的)。由于PyQt是Python与Qt的结合,所以它既可以利用Python强大而又简洁的语法,又不会丢失Qt强大的功能。从Python的角度来说,凡是Python涉及的所有简洁、易用性的语法,PyQt都可以使用;凡是Python涉及的所有开源模块,PyQt也都可以使用。从Qt的角度来说,由于PyQt完成了对Qt的所有类的封装,因此,从理论上说,使用Qt能开发出来的东西,使用PyQt也可以开发出来,因此,PyQt可以利用Qt强大的功能。由于充分利用了双方的优点,所以PyQt在开发程序的过程中会带来一些意想不到的收获,利用Python的简洁语法与强大而又丰富的生态圈,有些程序逻辑在Qt中实现会比较复杂,而在PyQt中却很简单,这才是PyQt最大的魅力之处。
近年来PyQt发展很快,从1998年最初的PyQt 0.1,到PyQt 1、PyQt 2、PyQt 3、PyQt 4以及最新的PyQt 5.9(截至2017年8月9日),并且实现了PyQt与Qt的同步更新。有一点非常遗憾的是,PyQt 5与PyQt 4并不兼容,PyQt 4的代码无法在PyQt 5中运行。PyQt 5的诞生时间是2013年4月,至今,PyQt 5经过了快速发展,现在已经非常成熟,并且Qt开发团队已经明确宣布从2015年开始就放弃了对Qt 4(对应PyQt 4)的支持,因此,对于想要学习PyQt的朋友来说,一开始就学习PyQt 5是一个最好的选择。
然而,非常遗憾的是,市面上并没有一本真正指导新手学习PyQt 5的教材,网络上针对PyQt 5的学习案例的知识结构也都非常零碎,无法形成一个学习PyQt 5的系统化框架。因此,对于新手来说,想要快速接受PyQt 5系统性的训练是一件非常困难的事情,笔者最初学习PyQt 5的时候也吃尽了苦头,查阅了PyQt 5与Qt 5的大量官方文献资料,并结合几年的实战应用之后,才可以说有一些水平。
编程是一个熟能生巧的活儿,目前PyQt 5的开发技术算是掌握一些了,但是如果未来不使用这项技术,那么再过几年说不定就完全忘记PyQt 5是如何使用的了,如果是这样的话就会给自己留下一些遗憾。考虑到现在个人还有一些额外的时间与精力,考虑到目前市面上还没有一本关于PyQt 5使用的教材,于是本书应运而生。
写书是一项神圣而又艰辛的工作,在本书的创作期间,为了让本书包含更多的内容,同时又让其变得更容易理解,我和搭档孙洋洋查阅了大量的PyQt 5官方文献资料,花费了很大的时间和精力在其中。本书得以顺利出版,是无数个日日夜夜调试和写作的成果。写作本书时总会遇到一些复杂的PyQt 5技术问题,我和搭档孙洋洋常常连续几天熬夜讨论,在每一个细节上反复推敲,每当攻克技术难点的时候,我们都感到无比快乐。我要特别感谢搭档孙洋洋,没有你的坚持和鼓励,就不会写出这么精彩的书籍,感谢你那较真的性格,谢谢你。
经过近一年的不懈付出,这本介绍PyQt 5的书终于出版了,希望这本书可以帮助更多的朋友掌握PyQt 5技术,少走些技术弯路。同时这本书能够按时出版,我感到无比欣慰,无论近一年吃了多少苦、牺牲了多少时间都是值得的。
本书结构
本书共有11章,基本包含了笔者在使用PyQt的过程中遇到的绝大多数技术及一些经典的应用。书中有些章节是具有独立性的,读者可以针对自己的实际情况选择阅读。
第1章介绍PyQt的入门知识,讲述PyQt的安装配置,以及Eric 6这个IDE的简单使用方法。已经有一定PyQt基础的朋友可以略去这一章。
第2章简单介绍Python的基本语法。本章内容针对一些没有接触过Python的读者,已经有一些Python基础的朋友可以略去这一章。
第3章介绍Qt Designer的使用方法。Qt Designer是一个PyQt的可视化界面编辑程序,它的作用是帮助用户快速开发出界面文件,我们可以通过其他方式把界面文件转换成Python代码文件。对于不懂太多PyQt知识的读者来说,本章内容可以让你快速入门;同时,本章也是让你的PyQt技术快速进步的最重要章节。
第4章介绍PyQt 5的基本窗口控件的使用方法。如果读者的时间并不充裕,只对部分控件感兴趣,则可以选择相应的小节阅读。
第5章介绍PyQt 5的高级界面控件的使用方法。如果读者对PyQt的表格、树、容器(多窗口控件)、多线程等感兴趣,则可以选择相应的小节阅读。
第6章介绍PyQt 5的布局管理(在第3章中阐述Qt Designer的使用方法时已经做了介绍,当时是通过Qt Designer这个代码生成器进行介绍的,而这里通过手工输入代码的方法进行介绍)。由于布局管理非常重要,值得我们用单独一章来介绍。如果读者对用纯代码实现布局管理器感兴趣,则可以参考这一章;如果对用代码生成器Qt Designer实现布局管理器感兴趣,则可以忽略这个章节。实际上,这两种方法并没有本质的区别。
第7章介绍PyQt 5信号与槽的应用。信号与槽是PyQt的核心,想要掌握PyQt的高级玩法,则可以仔细阅读这个章节。
第8章介绍PyQt 5的图形和特效。本章内容适用于有PyQt绘图、美化窗口需求的读者。
第9章介绍PyQt 5的扩展应用。如果你想知道如何把Python的一些非常流行的模块如PyInstaller、Pandas、Matplotlib、PyQtGraph、Plotly等与PyQt结合,则可以选择性阅读这个章节。
第10章通过几个例子介绍PyQt 5的实战应用。想要了解一些简单的程序是如何开发的朋友,则可以选择性阅读这个章节。
第11章介绍PyQt 5在金融领域的应用,这是本书作者孙洋洋在金融公司工作期间积累的一些实战性较高的案例,展示如何将PyQt 5应用到投资研究系统、量化投资以及金融工具开发中,读者可以根据自己的需求选择性阅读。
本书附赠内容
附录A:PyQt 5整体结构
附录B:Python开发技巧与实践
附录C:Python在线学习资料
附赠内容保存在github上,网址是:https://github.com/cxinping/PyQt5,读者可自行下载。祝读者学习顺利、事业有成。
本书读者
本书适合具有 Python 基础的读者,通过本书可熟悉 Python 基础知识并加深巩固。本书结构合理,内容翔实,适合对Python、Qt和PyQt编程感兴趣的科教人员和广大的计算机编程爱好者阅读,也可作为相关机构的培训教材。
致谢
首先,我要感谢我的父亲。在我上大学期间由于家庭变故,我的父亲王贵诚生病去世了,这对我打击很大。我一直很内疚,在他走之前,没能见上他最后一面。在最后一次谈话中,他要求我做一个对社会有用的人,实现自己的最大价值,尽自己的所能无私地帮助别人。如果时间可以倒流,我渴望给父亲一个拥抱,对他说:我明白,一代人做一代事。作为其子,我愿意为您分忧。父亲教会我人生的意义,让我懂得人活着就要做有意义的事情,快乐地过每一天。我爱我的父亲,我爱这个家。谢谢父亲这些年的细心教导,让我懂得生活的意义。谢谢您,我的父亲。
其次,我要感谢我的叔叔王辉和婶婶一家,我的叔叔是我的偶像,也是我做人做事的榜样。他教会我作为一个匠人,应该有的尊严和骄傲,他在我最困难的时候给予我无私的帮助,鼓励我追寻心中的梦想。他经常跟我说,一生之计在于勤,一天之计在于晨,刚开始我觉得道理浅显易懂,后来随着年龄的增长、社会阅历的增多,才逐渐明白,一个人只有付出不亚于任何人的努力,在自己的领域一直努力钻研,锲而不舍,才能成功。这个道理很浅显易懂,当时年幼不觉得如何有用,直至今日,方才明白是至理名言。
本书的出版要特别感谢电子工业出版社的黄爱萍和葛娜,感谢她们在选题策划和稿件整理方面做出的大量工作。
同时,在本书创作过程中,感谢编委会的全体成员,提出很多宝贵的意见。感谢编委会的邢梦来,牺牲了大量的业余时间,积极和作者讨论写书细节,校对了全部课件程序,对每个程序都做了中文注解。
感谢兄长徐楠光,教会我用感恩的心去工作,积极主动地面对困难,让我对拥有的一切心怀感激。
感谢我的母亲徐素萍,感谢我的妻子李蕾,感谢你们在我写书的时候给我提出的建议,鼓励我写成此书。感谢母亲多年来含辛茹苦的培养,您对我的默默支持,是我积极向上的精神动力。
感谢我的好兄弟王祥平,在本书的出版过程中提出了很多宝贵的意见。在我心力交瘁时,鼓励我永不放弃,在科大学习期间是我一生中最快乐的日子。
感谢我的师傅张云河,您是我做人做事的榜样。感谢您教会我宝贵的专业知识,在我最落魄的时候给予我巨大的帮助,让我有能力去实现自己的梦想。我将继续追随您,为梦想而努力。
感谢潭州教育的众位老师,IOS学院的院长Dream老师,Python学院的院长强子老师,Android学院的院长Hank老师,教会我专业的技术,使我的技术突飞猛进,还鼓励我要为社会做出更多的贡献,实现自己的人生价值。
感谢罗曦、张剑、陈晓楠三位同学,为本书的编写提供了大量支持。
感谢洛基英语(Rocky English)的韩宏术老师、查理老师和刘安乐老师,使我的英语水平得到提高,让我掌握了地道、流利、准确的英语发音,可以无障碍地阅读英文技术文档。给予我信心,帮助我建立人生的目标和梦想。
最后,特别感谢克亚营销的刘克亚老师,拜读您写的《超高价营销》时,经常激动得彻夜难眠,书中的每个观点都让我兴奋不已,一二三成功模式更是坚定我写本书的原因,您教导我要先无私地给予别人,帮助别人成功,然后自己才能成功,推崇共赢而不是竞争。作为您的学生受益良多,您提出的克亚营销铁律,教会我如何实现自我价值。