PyQt5是一条 Python 的 GUI 开发框架

PyQt5 的安装

  1. pip3 install PyQt5
  2. 在终端中输入 python3进入 python 解释器
  3. 输入以下代码from PyQt5 import QtWidgets
  4. 如果显示执行成功,即表示安装完成

PyQt 的模块介绍

PyQt 在运行时,有几句固定代码

  1. 导入需要的库
    1. import sys
    2. from PyQt5 import QtWidgets # 这部分导入根据需要使用的框架进行导入
  2. 创建和停止应用程序
    1. app = QtWidgets.QApplication(sys.argv) # 创建应用程序
    2. ... # 期间是程序需要执行的代码,比如创建界面和各种逻辑
    3. sys.exit(app.exec()) # 退出应用程序

PyQt5的主要模块

模块 解释
QtCore 包括了核心的非 GUI 的功能。主要和时间、文件、文件夹、各种数据、流、URLS、mime 类文件、进程和线程。
QtGui 包括了窗口系统、事件处理、2D 图像、基本绘画、字体和文字类
QtWidgets 包括了一系列创建桌面应用的 UI元素
QtMultimedia 负责处理多媒体的内容和调用摄像头
QtBluetooth 负责查找和连接蓝牙
QtNetwork 负责网络编程
QtPositioning 负责定位相关
Enginio 包含了通过客户端进入和管理 Qt Cloud
QtWebSockets 实现了 WebSocket 协议
QtWebKit 包含了一个基于 WebKit2 的 web 浏览器
QtWebKitWidgets 包含了基于 QtWidgets 的 WebKit1的类
QtXml 负责处理 xml
QtSvg 负责显示 SVG 内容
QtSql 提供了处理数据库的工具
QtTest 提供了测试 PyQt5 应用的工具

设置图标、标题和窗口大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import sys

# 创建应用程序
app = QApplication(sys.argv)

# 设置程序图标
app.setWindowIcon(QIcon("qq.png"))

# 创建窗口组件
window = QMainWindow()

# 设置窗口大小
window.resize(300, 300)

# 设置程序标题
window.setWindowTitle("这是一个 QMainWindow 案例")

# 显示窗口组件
window.show()

# 退出应用程序
sys.exit(app.exec())

屏幕坐标系

  1. 屏幕和窗口都是以坐标确定位置的
  2. 屏幕左上角为坐标原点
  3. 屏幕左上角向右为 x 轴正向
  4. 屏幕左上角向下为 y 轴正向
  5. 窗口在屏幕中的位置坐标是以窗口左上角位置确定的

将窗口移动到屏幕中心

窗口需要居中屏幕时 x 和 y的坐标应该为

  1. x = (屏幕宽度 - 窗口宽度) / 2
  2. y = (屏幕高度 - 窗口宽度) / 2

移动到中心的方法

方法 调用对象 方法说明
screenGeometry() QDesktopWidget() 获取屏幕尺寸
geometry() QWidget() 获取窗口尺寸
move(x, y) QWidget() 移动到指定的位置

移动窗口的核心代码

1
2
3
4
5
6
7
8
9
# 获取屏幕尺寸
screen = QDesktopWidget().screenGeometry()

# 获取窗口尺寸
size = window.geometry()

# 移动到屏幕中心
window.move((screen.width() - size.width()) / 2,
(screen.height() - size.height()) / 2)

气泡提示

在界面设计的时候常常会用到的一个提示气泡,只要对任意一个 widget 设置一个属性就可以做到:setToolTip(msg)

msg就是你要设置的气泡提示

常用控件

QLabel

QLabel 可以显示不可编辑的文本或图片,也可以设置一个 gif 动画

QFont 用来设置字体样式和字体大小

常用方法:

方法 解释
__init__(str, parent: QWidget = None, flags: Union[WindowFlags, WindowType] = Qt.WindowFlags()) 初始化方法,str 也可以不传,初始化之后设置也可以
setText(str) 设置文本内容
setFont(QFont) 设置字体样式和大小
setPixmap(QPixmap) 设置图片

文本框控件

QLineEdit

QLineEdit 是单行文本框控件

常用方法:

方法 解释
setEchoMode(EchoMode) QLineEdit.Normal 正常显示所输入字符
QLineEdit.NoEcho 不显示任何输入的字符
QLineEdit.Password 显示与平台相关的密码掩码字符
QLineEdit.PasswordEchoOnEdit 在编辑时显示字符,负责显示密码类型的输入
setPlaceholderText(str) 设置文本框占位文字,即当有文字输入时,该文字会消失
setText(str) 设置文本框内容
setMaxLength(int) 设置文本框所允许输入的最大字符数
QTextEdit

QTextEdit 是多行文本框控件

  1. QTextEdit 可以显示多行文本内容,当文本内容超过控件范围时,会显示水平或者竖直的滚动条
  2. QTextEdit 不仅可以显示文本,还可以显示 HTML 文档

常用方法

方法 解释
setPlainText(str) 设置多行文本框的文字内容
toPlainText() → str 返回多行文本框的文字内容
setHtml(str) 设置文本框的内容为 HTML 文档
toHtml() → str 返回多行文本框的 HTML 文档内容
clear() 清空多行文本框内容

按钮控件

信号和槽

信号和槽机制是 QT 的核心机制,它是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性

信号和槽是用来在对象间传递数据的方法:当一个特定事件发生的时候,signal 会被emit出来,slot调用是用来响应对应的 signal

Qt 对象已经包含了很多预定义的 signal,Qt 对象也包含了很多预定义的槽函数

信号
  • 当对象的状态发生改变的时候,信号就由该对象发射出去
  • 当一个信号被发射、与其关联的槽函数被立刻执行,发射该信号的对象并不知道是哪个在接收在这个信号。再这样保证了对象与对象之间的低耦合。
  • 如果信号和多个槽函数相关联,当信号被发射时,这些槽函数的执行顺序将会是随机的,不确定的。
  • 用于接收信号,而且槽只是普通的成员函数。当和槽连接的信号被发射时,槽就会被调用。
  • 一个槽并不知道时候有任何信号与自己相连。
信号和槽的绑定

通过调用 QObject 对象的 connect 函数来将对象的信号与另外一个对象的槽函数相关联,当发射者发射信号时,接受者的槽函数将被调用。

  1. 信号和槽连接通过 connect 方法

  2. 槽函数可以是成员方法或者 lambda 表达式

QPushButton

QPushButton是一种普通的按钮,可以响应一些事件

QRadionButton

QRadionButton是单选按钮,它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项

标签用于显示对应的文本信息

单选框选中的信号时:toggled

QCheckBox

QCheckBox 提供一组带文本标签的复选框,用户可以选择多个选项

复选框选中的信号也为:toggled

对话框控件

对话框是为了更好的实现人与程序的交互

QMessageBox

reply = QMessageBox.information()

reply = QMessageBox.question()

两个提示框参数一模一样,唯一的差别就是提示框上显示的图片不一样

QInputDialog

QInputDialog是一个标准对话框,由一个文本框和两个按钮(OK按钮和 Cancel 按钮组成)

布局

一个窗口中可以有多个控件,所谓布局,就是将多个控件按我们需要的方式展示出来

布局大致可以分为:绝对布局,水平布局,竖直布局,网格布局,表单布局。

布局方法
  1. 布局中可以添加控件,使用 addWidget() 方法
  2. 布局中可以添加布局,使用 addLayout()方法
绝对布局

绝对布局就是通过在窗口程序中指定每一个控件的显示坐标和大小来实现的

  1. 优点:
    • 可以直接定位每一个控件的位置
  2. 缺点
    • 如果改变窗口大小,控件的大小和位置不会随之改变
    • 如果修改布局,比如新增一个控件,必须全部重新布局,很繁琐
水平布局

在水平布局中,按照从左往右的顺序添加控件。使用 QHBoxLayout 进行布局

竖直布局

在竖直布局中,按照从上往下的方式添加控件。使用 QVBoxLayout 进行布局

表单布局

表单布局是 label-field 式的表单布局,顾名思义,就是实现表单方式的布局,添加控件的方法为addRow(label, widget)

评论