你想念的Python Qt GUI来啦!顺带送干货:从Qt C++类库到PyQt5
off999 2024-10-18 08:09 17 浏览 0 评论
上周给大家推荐了新书Python Qt GUI与数据可视化编程,受到了广大读者的青睐,很多人问我何时上架?什么时间预订?能不能给发完整目录?需要这种知识很久了等回应。今天可以告诉大家,这本书上架啦!!!!
本书介绍在Python中使用PyQt5和其他模块进行GUI和数据可视化编程的方法。第一部分介绍PyQt5设计GUI程序的基本框架,包括GUI应用程序的基本结构、窗体UI可视化设计与窗体业务逻辑的设计、信号与槽的特点和使用等。第二部分介绍GUI程序设计中一些主要功能模块的使用,包括基本界面组件、事件处理、数据库、绘图、多媒体等。第三部分先介绍使用PyQtChart和PyQtDataVisualization进行二维和三维数据可视化设计的方法,再介绍将Matplotlib嵌入PyQt5 GUI应用程序窗口界面中进行数据可视化的编程方法。通过研读本书,读者可以掌握使用PyQt5、PyQtChart、Matplotlib等模块进行GUI应用程序和数据可视化设计的方法。
本书适合具有Python编程基础,并想通过Python设计GUI应用程序或在GUI应用程序中实现数据可视化的读者阅读和参考。
干货截选:2.6 从Qt C++类库到PyQt5
2.6.1 帮助信息的查找
1.在Qt Creator中查找帮助信息
安装PyQt5时不会安装完整的类库帮助文档,PyQt5的在线Reference Guide提供了PyQt5使用中的一些关键技术问题的说明,但是关于具体的某个类的信息并不完整,不如Qt官网上的帮助文档信息全面。
要离线获取一个类的详细帮助信息,可以使用Qt Creator的帮助窗口。例如,在Qt Creator的帮助窗口里搜索QSpinBox,其资料页面如图2-32所示,这里有对QSpinBox类的简单说明和主要特性的示例代码,列出了其所有的属性、类型定义、公共接口函数、公共槽函数、信号等,并且可以查看每一项的详细资料。
图2-32 在Qt Creator的帮助窗口查找类的详细信息
Qt类库包含的类很多,具体到某个特定的类,其属性、接口函数、信号也很多,不可能全部介绍或列出来。对任何一种编程语言来说,其自带的帮助文档的信息都是最全面最准确的,学习时要善于查找帮助信息。
2.在Python中查找帮助信息
PyQt5安装后虽然没有Qt Creator里那样详细的类库帮助文档,但是可以通过Python的一些基本指令获取类或函数的内置帮助信息。例如,dir()指令可以显示一个类的所有接口信息;help()指令可以显示一个类的详细接口定义或一个函数的原型定义。
例如,要在Python Shell里查看QSpinBox的帮助信息,可执行下面的指令:
>>> from PyQt5.QtWidgets import QSpinBox >>> dir(QSpinBox)
指令dir(QSpinBox)会列出QSpinBox的所有属性和方法的名称,包括所有从父类继承的属性和方法。
>>> help(QSpinBox)
指令help(QSpinBox)会更详细地列出QSpinBox类的所有属性和方法,它会先列出QSpinBox类里新定义的属性和方法,然后依次列出父类的属性和方法。接口函数(即方法)会显示输入输出参数定义。
help()指令也可以显示一个方法的函数原型(如QSpinBox.setValue()函数)的帮助信息:
>>> help(QSpinBox.setValue) Help on built-in function setValue: setValue(...) setValue(self, int)
其中的最后一行表示setValue()函数需要一个int类型的输入参数,没有返回值。self是Python中所有类的接口函数的第一个参数,不看作函数参数。
>>> help (QSpinBox.value) Help on built-in function value: value(...) value(self) -> int
上面显示的是QSpinBox.value()函数的帮助信息,最后一行表示value()函数返回一个int类型的数据,没有输入参数。
PyQt5的内置帮助信息虽然不详细、查阅不方便,但是可以提供最准确的信息,特别是在函数的输入输出参数定义上。对于某些类或函数,Qt C++类库中的定义和PyQt5中的定义有差异,应该以PyQt5的定义为准。
2.6.2 正确导入模块中的类
1.PyQt5的常用模块
PyQt5是Qt C++类库的一个Python绑定,它包含了很多模块,在PyQt5安装后的目录“D:\Python37\Lib\site-packages\PyQt5”里可以看到所有模块的文件。在前面的示例程序中已经用到了QtWidgets、QtCore、QtGui等模块,PyQt5中常用的几个模块如表2-5所示。
2.查找类所在的模块
在Python程序里用到某个PyQt5的类时,需要用import语句导入这个类,例如在前面的示例程序中用过这样的导入语句:
from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import pyqtSlot, pyqtSignal from PyQt5.QtGui import QIcon
因为Qt的类一般都以大写字母Q开头作为类名,与Python自带的类或其他程序包的类有很好的区分度,所以一般导入具体的类,然后在程序里直接使用这个类。
尽量不要使用类似于这样的导入语句:
from PyQt5.QtWidgets import *
这样虽然可以导入PyQt5.QtWidgets中的所有类并且直接使用,但是会导入很多不需要用到的类,这可能使程序运行变慢。
对于一个具体的类,如何知道它属于哪个模块呢?例如,对于类QPalette,如何知道它属于哪个模块,从而使用正确的import语句呢?
Qt C++的类库也是以模块组织的,Qt C++类库中的模块与PyQt5中的模块基本是对应的,可以在Qt Creator的帮助页面查找一个类的详细资料来查到其属于哪个模块。例如,QPalette类的帮助信息的基本描述如图2-33所示,其中有一行是:
qmake: QT += gui
这表明在Qt C++类库中,QPalette是属于gui模块的,那么在PyQt5中对应的模块就是PyQt5.QtGui,所以导入语句应该是:
from PyQt5.QtGui import QPalette
Qt帮助文档中qmake语句常见的描述与PyQt5模块的对应关系如表2-6所示。
2.6.3 部分类和接口函数的差异
PyQt5中大部分类的接口函数,以及每个函数的输入输出参数定义与Qt C++类库中的是一致的,所以在Qt Creator中查询帮助信息就可以知道类的接口或一个函数的输入输出参数。
但是有少量PyQt5的类或接口函数与Qt C++类库中的是不一样的。例如,对于QDataStream类,Qt C++类库中使用流操作符“>>”和“<<”实现各种类型数据的输入和输出,但是PyQt5中的QDataStream类没有这两个流操作符,而是定义了很多接口函数进行各种数据的输入和输出(详见9.3节)。
另外,有少量函数的接口在PyQt5和Qt C++中的定义不一样。例如,QFileDialog类的getOpenFileName()在Qt C++中的函数原型(省略了输入参数)是:
QString getOpenFileName(…);
而用help()指令查看的PyQt5中的函数原型(省略了输入参数)是:
getOpenFileName(…) -> Tuple[str, str]
getOpenFileName()函数在Qt C++和PyQt5中的输入参数相同,所以上面都省略了输入参数的显示。但是在Qt C++中,getOpenFileName()函数只返回一个选择的文件名,而在PyQt5中,getOpenFileName()返回一个Tuple类型的数据,第一个str类型数据是选择的文件名,第二个str类型数据是使用的文件过滤器。如果直接按照Qt C++中的函数原型在Python中使用QFileDialog.getOpenFileName()函数就会出现问题。
在Qt C++类库和PyQt5之间存在差异的类和接口函数并不多,但如果不知道这些差异,按照Qt C++类库的接口定义来使用PyQt5中的相应类或函数就会出现问题。例如,只根据Qt帮助文档里的函数原型使用PyQt5中的类或函数,或者是熟悉Qt C++类库使用的读者根据经验使用这些有差异的类或函数。
下面是整理的本书示例程序或使用PyQt5过程中遇到过的有差异的类或函数,这不是覆盖整个PyQt5的清单,不全面,但是可以让读者遇到此类问题时避免落入陷阱耗费时间。下面整理的内容只是列出了这些有差异的类或函数,并做简单说明,至于具体的差异之处,书中示例程序中涉及的地方会有具体说明。读者在用到以下这些类或函数时,也可以查阅Qt C++帮助文档和PyQt5内置帮助信息来明确这些差异之处。
(1)QDataStream类:接口函数存在较大差异,Qt C++中使用流操作符“>>”和“<<”,PyQt5中使用大量的接口函数替代流操作符。
(2)QFileDialog类:三个类函数getOpenFileName()、getOpenFileNames()、getSaveFileName()的返回数据有差异。Qt C++中只返回文件名或文件名列表,而PyQt5中返回的是一个Tuple类型的数据,第一个元素是文件名或文件名列表,第二个元素是使用的文件名过滤器。
(3)QFontDialog类:类函数getFont()的输入参数、返回数据有差异。
(4)QInputDialog类:getText()、getInt()等类函数返回数据有差异。
(5)QMediaRecorder类:supportedAudioSampleRates()函数返回数据有差异。
2.6.4 数据类型对应关系
C++是强制类型定义的语言,Python是动态数据类型语言,而且两种语言之间的数据类型有一些差异。例如对于字符串数据,Python有内建的str类型,而Qt C++中使用QString类。
Qt C++类库转换为PyQt5后,某些Qt C++中的数据类型与Python中的数据类型存在对应关系,知道这些常见的对应关系后,就可以根据Qt Creator里查到的Qt C++函数原型迅速知道Python中的函数原型,从而正确使用这些函数。
1.枚举型常数
Qt C++的名称空间(namespace)Qt包含大量的枚举类型的定义,例如,表示预定义颜色的枚举类型:
enum Qt::GlobalColor
其部分枚举值有Qt::white、Qt::black、Qt::red、Qt::blue等。
PyQt5.QtCore模块中的类Qt对应于Qt C++类库中的名称空间Qt,这些枚举类型常量都通过类属性访问,例如预定义颜色常量Qt.white、Qt.red等。
在Qt C++中,也经常在类里定义枚举类型,例如QPalette类定义的用于表示颜色角色的枚举类型:
enum QPalette::ColorRole
其部分枚举值有QPalette::Window、QPalette::Text等。
在PyQt5中,对应的枚举类型就是QPalette.ColorRole,而这些枚举类型常量作为类属性访问,也就是QPalette.Window、QPalette.Text等。
2.Qt C++中的QString与Python的str类型
PyQt5中没有QString类型,Qt C++中的QString会被自动转换为Python的str类型,例如,C++中的一个函数返回值是QString类型:
QString QFileDialog::getExistingDirectory(…);
在PyQt5中的返回值就是str类型:
getExistingDirectory(…) -> str
由于返回结果是Python的str类型,不能使用QString的接口函数对返回结果进行处理,而应该使用Python的str类型的接口函数。
3.列表类型
在Qt C++中用QList<type>定义类型为type的数据列表,而在Python中有内建的list数据类型,所以,Qt C++中的QList<type>在PyQt5中对应的是list[type]数据。例如,Qt C++中用于表示字符串列表的是QStringList类,在PyQt5中没有这个类,而是转换为list[str]数据。
例如,Qt C++中QFileDialog.getOpenFileNames()函数用于返回选择的多个文件的列表,其C++函数原型定义(省略了输入参数)是:
QStringList getOpenFileNames(…);
而在PyQt5的内置帮助信息显示的函数原型(省略了输入参数)是:
getOpenFileNames(…) -> Tuple[List[str], str]
其返回数据是Tuple类型,第一个数据List[str]是选择的文件名称字符串列表,第二个str数据是使用的文件过滤器。所以,这里还存在Qt C++与PyQt5函数参数不一致的问题。
既然返回的结果是list[str],就应该用Python的list数据处理的方法,例如:
fileList,flt=QFileDialog.getOpenFileNames(self,"选择多个文件", "", "Images(*.jpg)") if (len(fileList)<1): #fileList是字符串列表 return for i in range(len(fileList)): print(fileList[i])
相关推荐
- python gui编程框架推荐以及介绍(python gui开发)
-
Python的GUI编程框架有很多,这里为您推荐几个常用且功能强大的框架:Tkinter:Tkinter是Python的标准GUI库,它是Python内置的模块,无需额外安装。它使用简单,功能较为基础...
- python自动化框架学习-pyautogui(python接口自动化框架)
-
一、适用平台:PC(windows和mac均可用)二、下载安装:推荐使用命令行下载(因为会自动安装依赖库):pipinstallPyAutoGUI1该框架的依赖库还是蛮多的,第一次用的同学耐心等...
- Python 失宠!Hugging Face 用 Rust 新写了一个 ML框架,现已低调开源
-
大数据文摘受权转载自AI前线整理|褚杏娟近期,HuggingFace低调开源了一个重磅ML框架:Candle。Candle一改机器学习惯用Python的做法,而是Rust编写,重...
- Flask轻量级框架 web开发原来可以这么可爱呀~(建议收藏)
-
Flask轻量级框架web开发原来可以这么可爱呀大家好呀~今天让我们一起来学习一个超级可爱又实用的PythonWeb框架——Flask!作为一个轻量级的Web框架,Flask就像是一个小巧精致的工...
- Python3使用diagrams生成架构图(python架构设计)
-
目录技术背景diagrams的安装基础逻辑关系图组件簇的定义总结概要参考链接技术背景对于一个架构师或者任何一个软件工程师而言,绘制架构图都是一个比较值得学习的技能。这就像我们学习的时候整理的一些Xmi...
- 几个高性能Python网络框架,高效实现网络应用
-
Python作为一种广泛使用的编程语言,其简洁易读的语法和强大的生态系统,使得它在Web开发领域占据重要位置。高性能的网络框架是构建高效网络应用的关键因素之一。本文将介绍几个高性能的Python网络框...
- Web开发人员的十佳Python框架(python最好的web框架)
-
Python是一种面向对象、解释型计算机程序设计语言。除了语言本身的设计目的之外,Python的标准库也是值得大家称赞的,同时Python还自带服务器。其它方面,Python拥有足够多的免费数据函数库...
- Diagram as Code:用python代码生成架构图
-
工作中常需要画系统架构图,通常的方法是通过visio、processon、draw.io之类的软件,但是今天介绍的这个软件Diagrams,可以通过写Python代码完成架构图绘制,确实很co...
- 分享一个2022年火遍全网的Python框架
-
作者:俊欣来源:关于数据分析与可视化最近Python圈子当中出来一个非常火爆的框架PyScript,该框架可以在浏览器中运行Python程序,只需要在HTML程序中添加一些Python代码即可实现。该...
- 10个用于Web开发的最好 Python 框架
-
Python是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还...
- 使用 Python 将 Google 表格变成您自己的数据库
-
图片来自Shutterstock,获得FrankAndrade的许可您知道Google表格可以用作轻量级数据库吗?GoogleSheets是一个基于云的电子表格应用程序,可以像大多数数据库管...
- 牛掰!用Python处理Excel的14个常用操作总结!
-
自从学了Python后就逼迫用Python来处理Excel,所有操作用Python实现。目的是巩固Python,与增强数据处理能力。这也是我写这篇文章的初衷。废话不说了,直接进入正题。数据是网上找到的...
- 将python打包成exe的方式(将python文件打包成exe可运行文件)
-
客户端应用程序往往需要运行Python脚本,这对于那些不熟悉Python语言的用户来说可能会带来一定的困扰。幸运的是,Python拥有一些第三方模块,可以将这些脚本转换成可执行的.exe...
- 对比Excel学Python第1练:既有Excel,何用Python?
-
背景之前发的文章开头都是“Python数据分析……”,使得很多伙伴以为我是专门分享Python的,但我的本意并非如此,我的重点还是会放到“数据分析”上,毕竟,Python只是一种工具而已。现在网上可以...
- 高效办公:Python处理excel文件,摆脱无效办公
-
一、Python处理excel文件1.两个头文件importxlrdimportxlwt其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入。2.读取exce...
你 发表评论:
欢迎- 一周热门
-
-
python 3.8调用dll - Could not find module 错误的解决方法
-
加密Python源码方案 PyArmor(python项目源码加密)
-
Python3.8如何安装Numpy(python3.6安装numpy)
-
大学生机械制图搜题软件?7个受欢迎的搜题分享了
-
编写一个自动生成双色球号码的 Python 小脚本
-
免费男女身高在线计算器,身高计算公式
-
将python文件打包成exe程序,复制到每台电脑都可以运行
-
Python学习入门教程,字符串函数扩充详解
-
Python数据分析实战-使用replace方法模糊匹配替换某列的值
-
Python进度条显示方案(python2 进度条)
-
- 最近发表
-
- python gui编程框架推荐以及介绍(python gui开发)
- python自动化框架学习-pyautogui(python接口自动化框架)
- Python 失宠!Hugging Face 用 Rust 新写了一个 ML框架,现已低调开源
- Flask轻量级框架 web开发原来可以这么可爱呀~(建议收藏)
- Python3使用diagrams生成架构图(python架构设计)
- 几个高性能Python网络框架,高效实现网络应用
- Web开发人员的十佳Python框架(python最好的web框架)
- Diagram as Code:用python代码生成架构图
- 分享一个2022年火遍全网的Python框架
- 10个用于Web开发的最好 Python 框架
- 标签列表
-
- python计时 (54)
- python安装路径 (54)
- python类型转换 (75)
- python进度条 (54)
- python的for循环 (56)
- python串口编程 (60)
- python写入txt (51)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python qt (52)
- python人脸识别 (54)
- python斐波那契数列 (51)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- centos7安装python (53)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)