本书既是介绍PyQt 5的快速入门书籍,也是介绍PyQt 5实战应用的书籍。PyQt 5是对Qt所有类的Python封装,既可以利用Qt的强大功能,也可以利用Python丰富的生态圈,同时能够结合Python简洁的语法进行操作,其结果就是使用PyQt 5可以高效、简单地开发出自己想要的程序。本书内容丰富,对PyQt 5基础知识的介绍比较全面,同时对新手使用PyQt 5的一些重点、难点都有专门的章节进行针对性分析,还重点介绍了如何把Python的一些重量级模块(Pandas、Matplotlib和Plotly)嵌入到PyQt 5中,从而极大地节约开发时间。最后,本书给出一些综合性较强的实战案例,帮助读者快速掌握PyQt 5的实战应用。
总而言之,本书旨在帮助读者以最短的时间掌握PyQt 5的基础知识并能够实战应用,希望本书对有Python程序开发需求的读者有帮助。
本书旨在帮助读者以最短的时间掌握PyQt 5的基础知识并能够实战应用,希望本书对有Python程序开发需求的读者有帮助。
王硕,网名信平,北京鼎鑫拓达资深软件工程师,具有8年的Java企业应用开发经验和3年教育培训经验。曾主持多个B/S项目的开发,经验丰富。擅长J2EE(JSP/Servlet、 JDBC、Struts2、Spring、Hibernate)项目开发、Python(程序GUI、数据分析、网络爬虫、机器学习)项目开发,JavaScript、HTML 5和数据库技术,是极宽Top开源团队核心成员。
孙洋洋,现就职于一家资产管理公司,负责公司量化投研系统的开发与维护,有多家券商工作与实习经验。擅长网络爬虫、机器学习、程序GUI开发与设计,对量化投资领域兴趣浓厚,有多年量化投资实盘操作经验,是极宽Top开源团队核心成员。
前 言
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)的韩宏术老师、查理老师和刘安乐老师,使我的英语水平得到提高,让我掌握了地道、流利、准确的英语发音,可以无障碍地阅读英文技术文档。给予我信心,帮助我建立人生的目标和梦想。
最后,特别感谢克亚营销的刘克亚老师,拜读您写的《超高价营销》时,经常激动得彻夜难眠,书中的每个观点都让我兴奋不已,“一二三成功模式”更是坚定我写本书的原因,您教导我要先无私地给予别人,帮助别人成功,然后自己才能成功,推崇共赢而不是竞争。作为您的学生受益良多,您提出的克亚营销铁律,教会我如何实现自我价值。在此,让我怀着激动的心情写出克亚营销铁律。
第一,你的所有营销沟通和活动,都必须100%从对方的角度思考。
第二,为对方产生结果贡献价值,促成对方最轻松、最快速地实现梦想,是你一切营销的终极目标。
第三,你必须保证结果,提供零风险承诺是你的责任,更是你的义务。
第四,你永远不会考虑说什么才能说服对方,你始终问自己,“给什么才能让对方明白购买你的产品或服务是他唯一合理的选择”。
第五,你永远不会等到对方购买后,才开始对他的人生和梦想贡献价值。
第六,你永远不会因为对方已经购买就停止对他的人生和梦想贡献价值。
第七,你为对方创造10倍的价值,才索取1倍的回报。
第八,有价值的教育是给予,也是贡献。
第九,你必须让对方能够轻松、快速、方便地购买和使用你的产品或服务,并从中受益。
第十,你只推崇共赢,从不相信竞争,在你的书本里,当创造力熄灭的时候,才是竞争开始的时候。
第十一,你必须让对方发自内心地感到,认识你并和你交往是幸运的,也是快乐的。
第十二,你坚信世界上最自私的行为是无私。
刘克亚老师的克亚营销思想是PC互联网时代强大的营销利器,更是移动互联网时代基本的营销必备工具,因为它的理论根植于人性的基本规律和商业的客观规律。当接触克亚营销后,我才明白如何打造出爆款产品(这里的产品指一切可以销售的商品,软件也属于商品的一种)。以前我只认识到软件开发的重要性,但接触克亚营销后才发现,最重要的一环是软件销售,只有销售成功了,才能为企业带来足够的利润,企业才有能力继续维护和开发下一版软件,进入良性循环中,这种软件才可以称得上是成功的软件。所以,我以此书向刘克亚老师致敬,谢谢您。
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
下载资源:本书所提供的示例代码及资源文件,均可在 下载资源 处下载。
提交勘误:您对书中内容的修改意见可在 提交勘误 处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/32291
有没有直接读入hdF5案例,然后显示的,很多大数据分析都是用h5格式
求作者解答

案例二:9.3.4 pandas_pyqt.py
运行后 ,如果点了edit 后,双击字段内容,有一定概率跳出如下BUG ,不知如何修复,请赐教,感谢!!
请回复,或者EMAIL:hc_xing@126.com
再次感谢!
调试程序PyQt5/Chapter04/qt04_painter.py时,程序报错:
QPaintDevice: Cannot destroy paint device that is being painted
Process finished with exit code -1073740791 (0xC0000409)
修改程序:
打印
painter.begin(self)
painter.drawImage(0, 0, self.image)
painter.end()
一切OK!
作者您好,我做了个pyqt5界面,界面可以通过串口接收单片机传输过来数据,同时界面还可以实时显示摄像头识别的画面,但是随着接收的数据越来越多,发现界面会逐渐变得卡顿,请问如何解决。网上提到的解决方法是使用多线程,或者定时清理控件占用的内存(清理内存我不知道如何处理),麻烦给予解答,谢谢。
作者您好!本书确实是学习PyQt5很好的入门教材,获益很多。有一个学习过程中的问题一直解决不了,就是在第5章学习时,5.4网页交互例子qt05_webview01中,python qt5.15 WebeEngineView 加载网页显示空白而不是网页? 网上查了很多方法,都解决不了。后很多章节凡是涉及加载网页的,都有这个问题,不知是什么情况,特此请教!