logo资料库

PyQt5入门教程.pdf

第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
资料共38页,剩余部分请下载后查看
前言
第二版声明
安装和配置
安装pyqt5
安装pyqt4
beginning
窗口
加上图标
弹出提示信息
关闭窗体时询问
屏幕居中显示窗体
QMainWindow类
加上状态栏
加上菜单栏
信号-槽机制
如何查阅资料
查看pydoc
相关网络资源
信号-槽详解
自定义信号
自定义槽
发射信号
信号-槽机制的反思
使用Qt designer
资源文件管理
资源管理
配置文件管理
QSettings构造函数
IniFormat
ini文件存放DIY
ini文件注意事项
存值和读值
群组管理
布局管理
QBoxLayout
addStretch方法
QGridLayout
QFormLayout
快捷键和Tab键管理
什么是伙伴关系
快捷键
QKeySequence
国际化支持
使用翻译文件
使用qt官方翻译文件
附录
PyQt4和PyQt5的区别整理
引用信号发射对象
菜单栏看不见?
参考资料
PyQt5 入门(第二版) 万泽 2016 年 3 月 19 日 目 录 前言 第二版声明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 安装和配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 安装 pyqt5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 安装 pyqt4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 1 2 beginning 3 3 窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 加上图标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 弹出提示信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 关闭窗体时询问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 屏幕居中显示窗体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . QMainWindow 类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 加上状态栏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 加上菜单栏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 信号-槽机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 如何查阅资料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 查看 pydoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 相关网络资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 信号-槽详解 15 自定义信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 自定义槽 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 发射信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1
信号-槽机制的反思 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 使用 Qt designer 23 资源文件管理 23 资源管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 配置文件管理 24 QSettings 构造函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 IniFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 ini 文件存放 DIY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 ini 文件注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 存值和读值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 群组管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 布局管理 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 QBoxLayout addStretch 方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 QGridLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 QFormLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 快捷键和 Tab 键管理 32 什么是伙伴关系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 快捷键 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 QKeySequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 国际化支持 33 使用翻译文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 使用 qt 官方翻译文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 附录 35 PyQt4 和 PyQt5 的区别整理 . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 引用信号发射对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 菜单栏看不见? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 参考资料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2
前言 第二版声明 随着作者编程水平的上升,对很多内容都有了不同的理解。本文进行了进一步的重 新修改,推出第二版。 本文的例子都是基于 PyQt5。如果读者需要使用 PyQt4,请参看附录后面的 PyQt4 和 PyQt5 的区别整理一小节。 安装和配置 安装 pyqt5 就 ubuntu 下安装 pyqt5 是很简单的,如下所示: sudo apt-get install python3-pyqt5 如果你使用的是默认的 python3 版本的话,否则你可能需要手工编译 pyqt5。 其中安装 Qt5 不需要我们多费心,请确保下面几个软件包安装上去了(参考了 这个 网页 和 这个网页 ): sudo apt-get install qt5-default sudo apt-get install qtbase5-dev sudo apt-get install qtdeclarative5-dev 上面的第三个可能并不需要安装,其中第一个 qt5-default 和 qmake 的 v5 版本 有关,然后 qtbase5-dev 肯定是需要安装的。不管怎么说,确保这些都装上吧。 然后再在 PyQt 的官网 下载 SIP 的源码,运行 python3 configure.py 输出 makefile,后面就是大家熟悉的 make , sudo make install 。 继续再下载 PyQt5 的源码,安装步骤同上,这里就不赘述了。 在后面我们会提到 pyuic5 和 pyrcc5 命令,其在下面这个软件包里面: 3
sudo apt-get install pyqt5-dev-tools 检查 pyqt5 安装情况执行以下脚本即可,显示的是当前安装的 pyqt5 的版本号: >>> from PyQt5.QtCore import QT_VERSION_STR >>> print(QT_VERSION_STR) 5.2.1 本文的代码都是 PyQt 版本号都是上面的,没有特别的理由,会一直维持在这个版 本号里面了。 安装 pyqt4 安装 pyqt4 大致过程类似上面,只是一些细节上的改动了,比如: ubuntu 下安装 pyqt4 即: sudo apt-get install python3-pyqt4 如果你需要使用 qt designer 来辅助设计 GUI,你还需要额外安装 qt designer 软 件和 pyuic4 和 pyrcc4 命令。(顺便再次提醒下 pyrcc4 对中文目录目前支持有问题 (201410)) sudo apt-get install pyqt4-dev-tools qt4-designer 检查 pyqt4 安装情况执行以下脚本即可,显示的是当前安装的 pyqt4 的版本 号: from PyQt4.QtCore import QT_VERSION_STR print(QT_VERSION_STR) 4
beginning 窗口 请看到下面的代码: import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import * class MyWidget(QWidget): def __init__(self): super().__init__() self.setGeometry(0, 0, 800, 600) # 坐标 0 0 大小 800 600 self.setWindowTitle(’myapp’) myapp = QApplication(sys.argv) mywidget = MyWidget() mywidget.show() sys.exit(myapp.exec_()) 首先导入 sys 宏包,这是为了后面接受 sys.argv 参数。关于引入这里值得一提的 是: 很多 pyqt4 原放在 QtGui 里面的一些 QWidget 在 pyqt5 里面都放入 QtWidgets 里面去了。 接下来我们定义了 MyWidget 类,它继承自 QWidget 类。然后通过 QWidget 类 的 setGeometry 方法来调整窗口的左顶点的坐标位置和窗口的大小。 然后通过 setWindowTitle 方法来设置这个窗口程序的标题,这里就简单设置 为”myapp” 了。 任何窗口程序都需要创建一个 QApplication 类的实例,这里是 myapp。然后接下 来创建 QWidget 类的实例 mywidget,然后通过调用 mywidget 的方法 show 来显示 窗体。 5
最后我们看到系统要退出是调用的 myapp 实例的 exec_ 方法。 加上图标 import sys from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QWidget, QApplication class MyWidget(QWidget): def __init__(self): super().__init__() self.resize(800,600) self.setWindowTitle(’myapp’) self.setWindowIcon(QIcon\ (’icons/myapp.ico’)) myapp = QApplication(sys.argv) mywidget = MyWidget() mywidget.show() sys.exit(myapp.exec_()) 这个程序相对上面的程序就增加了一个 setWindowIcon 方法,这个方法调用了 QtGui.QIcon 方法,然后后面跟的就是图标的存放路径,使用相对路径。在运行这个例 子的时候,请随便弄个图标文件过来。 为了简单起见这个程序就使用了 QWidget 类的 resize 方法来设置窗体的大小。 弹出提示信息 import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import * 6
class MyWidget(QWidget): def __init__(self): super().__init__() self.resize(800,600) self.setWindowTitle(’myapp’) self.setWindowIcon(QIcon\ (’icons/myapp.ico’)) self.setToolTip(’ 看什么看 ^_^’) QToolTip.setFont(QFont\ (’ 微软雅黑’, 12)) myapp = QApplication(sys.argv) mywidget = MyWidget() mywidget.show() sys.exit(myapp.exec_()) 上面这段代码和前面的代码的不同就在于 MyWidget 类的初始函数新加入了两条命令。 其中 setToolTip 方法设置具体显示的弹出的提示文本内容,然后后面调用 QToolTip 类的 setFont 方法来设置字体和字号,我不太清楚这里随便设置系统的字体微软雅黑是 不是有效。 这样你的鼠标停放在窗口上一会儿会弹出一小段提示文字。 关闭窗体时询问 import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import * class MyWidget(QWidget): def __init__(self): super().__init__() self.resize(800,600) self.setWindowTitle(’myapp’) 7
self.setWindowIcon(QIcon\ (’icons/myapp.ico’)) self.setToolTip(’ 看什么看 ^_^’) QToolTip.setFont(QFont\ (’ 微软雅黑’, 12)) def closeEvent(self, event): # 重新定义 colseEvent reply = QMessageBox.question\ (self, ’ 信息’, ” 你确定要退出吗?”, QMessageBox.Yes, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() myapp = QApplication(sys.argv) mywidget = MyWidget() mywidget.show() sys.exit(myapp.exec_()) 这段代码和前面代码的不同就是重新定义了 colseEvent 事件。这段代码的核 心 就 是 QtGui 类 的 QMessageBox 类 的 question 方法, 这 个 方 法 将 会 弹 出 一 个 询问窗体。这个方法接受四个参数:第一个参数是这个窗体所属的母体,这里就是 self 也就是实例 mywidget;第二个参数是弹出窗体的标题;第三个参数是一个标准 button;第四个参数也是一个标准 button,是默认(也就是按 enter 直接选定的)的 button。然后这个方法返回的是那个被点击了的标准 button 的标识符,所以后面和标 准 QMessageBox.Yes 比较了,然后执行 event 的 accept 方法。 屏幕居中显示窗体 8
分享到:
收藏