用代码学 PyQt5 !
本项目的新版 「PySide6 代码教程」 已经开始动工啦!
相比本项目,有如下升级:
- Python
3.10
+ PySide6.3
,版本更新、功能更强大 - 项目结构更清晰,不再将控件、信号与槽、QSS 等等各种知识混杂在一起
- 代码中注释讲解比例更高更清晰
- PySide 由 Qt 官方提供支持,比 PyQt 许可更宽松、文档更全面
欢迎新老读者前往阅读和提供贡献!
- 每个模块(
.py
文件)都可运行,展示了各种控件的各种功能属性作用,代码中有注释讲解 - 在自己的机器上实际运行一下,仔细观察一下每个属性值的改变会怎样影响控件的外观行为,可能比静态的文档教程更有效。
- 目前还在更新完善中,也期待小伙伴加入,共同完善这个仓库(提交 PR 或者 联系作者 )
- 由于作者精力有限,暂停 Gitee仓库 的更新维护,最新修改以 GitHub仓库 为准
- Star 本仓库
- 克隆本仓库到本地(
git clone https://github.com/muziing/PyQt_practice.git
),或下载 zip 归档并解压 - 在命令行执行
pip install -r requirements.txt
安装依赖 - 进入你感兴趣的控件对应的文件夹,运行任何一个
.py
文件观察效果 - 对于大多数目录,首个文件都是一个 Markdown 文档,为 Qt 官方文档对应的中文翻译并简单整理版
以 47-QListView 目录下的 02-QListView-自动换行、布局间距、对齐、单词省略.py 为例:
# 02-QListView-自动换行、布局间距、对齐、单词省略.py
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QListView-自动换行、布局间距、对齐、单词省略")
self.resize(500, 500)
self.data_list = [f"Item{i}" for i in range(15)] # 将数据列表保存在属性中
self.data_list.append("Something very very long") # 再添加一个特殊的很长的项
self.setup_ui()
def setup_ui(self):
btn = QPushButton("增大Spacing", self)
btn.move(350, 200)
list_view = QListView(self) # 创建list view对象
list_view.move(100, 100)
list_view.resize(200, 200)
slm = QStringListModel() # 创建model模型
slm.setStringList(self.data_list) # 为模型设置数据
list_view.setModel(slm) # 为视图设置模型
# -------自动换行---------
list_view.setWrapping(True) # 打开自动换行
# 对于 Flow 为 TopToBottom,应该叫做“自动换列”,垂直空间不能一次全部显示所有项时,再右侧再加一列显示,而不是加滚动条
# -------布局间距--------
list_view.setSpacing(10) # 默认为0
def test_slot():
"""测试按钮的槽函数"""
list_view.setSpacing(list_view.spacing() + 5) # 修改此值会导致重新布局
btn.clicked.connect(test_slot)
# --------对齐-----------
# setItemAlignment 只有在 ListMode 为 TopToBottom 且 wrapping 打开时才有效
# list_view.setItemAlignment(Qt.AlignTop) # 垂直靠上对齐
list_view.setItemAlignment(Qt.AlignVCenter | Qt.AlignLeft) # 垂直居中,水平靠左对齐
# ------单词省略------
list_view.setWordWrap(True) # 启用单词省略,太长的文本将收到省略号...中
# list_view.setTextElideMode(Qt.ElideLeft) # 省略号在最左侧
list_view.setTextElideMode(Qt.ElideMiddle) # 省略号在中间
# list_view.setTextElideMode(Qt.ElideNone) # 无省略号,但是最后的内容仍然会被省略
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
- 直接运行这段代码即可看到程序窗口和上面的 QListView 控件
- 注释/取消注释第 26 行代码,以观察自动换行属性的效果
- 按下"增大Spacing"按钮,以观察不同的 Spacing 值的显示效果
- 每次注释掉40/41行代码中的一个,运行另一行,以观察不同的 ItemAlignment 值的对齐效果
- 每次注释掉45/46/47行代码中的一个,运行剩下的那行,以观察不同的省略号模式的效果
- 在同一目录(47-QListView)下的第一个文件 00-QListView-列表视图.md 中查看更多信息
一些 PyQt 相关文档、教程、Demo、QSS 美化等收集整理
01 PyQt基本结构
02 QObject
- QObject.py
- QObject_2.py
- 信号的操作.py
- 信号的操作(小案例1).py
- 信号的操作(小案例2).py
- QObject类型判定.py
- QObject类型判定-案例.py
- QObject对象删除.py
- PyQt事件机制.py
- QObject定时器.py
- QObject定时器-案例.py
03 QWidget
- QWidget-用户界面的基类.md
- QWidget-简介.py
- QWidget-大小位置.py
- QWidget-案例.py
- QWidget-最大最小尺寸-API.py
- QWidget-内容边距操作.py
- QWidget-鼠标相关操作.py
- QWidget-鼠标跟踪-API.py
- QWidget-鼠标相关操作-案例.py
- QWidget-案例1-鼠标移入移出.py
- QWidget-案例2-键盘点击案例.py
- QWidget-案例3-鼠标拖动窗口案例.py
- QWidget-父子关系-API.py
- QWidget-父子关系-案例.py
- QWidget-层级关系调整.py
- QWidget-顶层窗口相关操作.py
- QWidget-窗口状态.py
- QWidget-窗口最大化最小化、WindowFlags笔记.py
- QWidget-顶层窗口操作-案例.py
- QWidget-交互状态-显示隐藏控件、设置控件不可用.py
- QWidget-交互状态-是否被编辑、是否为活动窗口.py
- QWidget-交互状态-关闭与释放.py
- QWidget-交互状态-案例-登录界面.py
- QWidget-信息提示.py
- QWidget-焦点控制.py
- QAbstractButton-按钮的抽象基类.md
- QAbstractButton-简单介绍.py
- QAbstractButton-功能测试.py
- QAbstractButton-状态设置.py
- QAbstractButton-排他性.py
- QAbstractButton-模拟点击.py
- QAbstractButton-点击有效区域.py
- QAbstractButton-可用信号.py
05 QPushButton
- QPushButton-普通按钮.md
- QPushButton-构造函数.py
- QPushButton-菜单.py
- QPushButton-扁平化.py
- QPushButton-默认处理.py
- QPushButton-右键菜单.py
- QCommandLinkButton.py
06 QToolButton
- QToolButton-工具栏按钮.md
- QToolButton-创建与基本显示.py
- QToolButton-样式设置.py
- QToolButton-箭头.py
- QToolButton-自动提升.py
- QToolButton-菜单和弹出模式.py
- QToolButton-可用信号.py
07 QRadioButton
08 QButtonGroup
09 QCheckBox
10 QLineEdit
- QLineEdit-单行文本编辑器.md
- QLineEdit-创建、插入与获取内容.py
- QLineEdit-文本的设置与获取-案例.py
- QLineEdit-文本输出模式.py
- QLineEdit-登录案例.py
- QLineEdit-占位文本设置、清空按钮.py
- QLineEdit-添加自定义行为-明密文切换.py
- QLineEdit-自动补全.py
- QLineEdit-长度和只读限制.py
- QLineEdit-验证器的使用.py
- QLineEdit-验证器-掩码.py
- QLineEdit-文本修改状态.py
- QLineEdit-光标位置控制.py
- QLineEdit-文本边距设定.py
- QLineEdit-对齐方式.py
- QLineEdit-编辑功能.py
- QLineEdit-编辑功能-选中.py
- QLineEdit-信号.py
11 QFrame
13 QTextEdit
- QTextEdit-文本编辑器.md
- QTextEdit-创建.py
- QTextEdit-占位文本的设置.py
- QTextEdit-文本内容的设置.py
- QTextEdit-文本光标-插入文字、图片、句子.py
- QTextEdit-文本光标-插入列表.py
- QTextEdit-文本光标-插入表格.py
- QTextEdit-文本光标-插入文本块.py
- QTextEdit-文本光标-插入文本框架.py
- QTextEdit-文本光标-格式操作.py
- QPlainTextEdit-纯文本编辑器.md
- QPlainTextEdit-创建、占位提示文本、只读、字符格式.py
- QPlainTextEdit-软换行、覆盖模式、tab控制.py
- QPlainTextEdit-文本操作、块操作.py
- QPlainTextEdit-放大缩小、滚动内容以显示光标.py
- QPlainTextEdit-光标操作.py
- QPlainTextEdit-信号.py
- QPlainTextEdit-案例-显示行号.py
- QAbstractSpinBox-数字设定框的抽象基类.md
- QAbstractSpinBox-创建、模拟子类化、获取与设置控件内容.py
- QAbstractSpinBox-长按累加加速、只读.py
- QAbstractSpinBox-对齐方式、周边框架、清空文本内容、按钮标识.py
- QAbstractSpinBox-内容验证、信号.py
17 QSpinBox
- QSpinBox-数字设定框.md
- QSpinBox-创建、最大值最小值范围、数值循环.py
- QSpinBox-步长设置、前后缀和特殊文本、进制设置.py
- QSpinBox-值的设置和获取、自定义展示格式.py
- QSpinBox-信号.py
- QDoubleSpinBox-浮点数设定框.md
- QDoubleSpinBox-创建、数值范围、数值循环、设置步长、前后缀.py
- QDoubleSpinBox-最小值特殊文本、小数位数、设置与获取数值、自定义展示格式.py
- QDoubleSpinBox-信号.py
20 QDateEdit
21 QTimeEdit
22 QComboBox
- QComboBox-组合下拉框.md
- QComboBox-创建、数据操作.py
- QComboBox-模型操作、视图操作.py
- QComboBox-数据获取.py
- QComboBox-数据限制.py
- QComboBox-功能.py
- QComboBox-信号.py
- QComboBox-案例.py
- QAbstractSlider-滑块控件抽象基类.md
- QAbstractSlider-创建、数值范围、当前数值、步长.py
- QAbstractSlider-是否追踪、滑块位置、倒立外观、操作反转、滑块方向.py
- QAbstractSlider-是否按下、信号.py
25 QSlider
26 QScrollBar
27 QDial
28 QRubberBand
29 QDialog
30 QFontDialog
31 QColorDialog
- QColorDialog-颜色选择对话框.md
- QColorDialog-创建.py
- QColorDialog-功能作用.py
- QColorDialog-静态方法.py
- QColorDialog-信号.py
32 QFileDialog
- QFileDialog-文件选择对话框.md
- QFileDialog-静态方法-弹出文件操作对话框.py
- QFileDialog-静态方法-弹出文件夹操作对话框.py
- QFileDialog-构造函数、接收模式、默认后缀名、文件模式.py
- QFileDialog-名称过滤器、显示信息详细程度、设置指定角色的标签名称.py
- QFileDialog-信号.py
33 QInputDialog
35 QLabel
- QLabel-标签控件.md
- QLabel-创建、对齐、间距、缩进.py
- QLabel-文本格式、伙伴.py
- QLabel-内容缩放(图片).py
- QLabel-文本交互标识和选中.py
- QLabel-外部链接、换行.py
- QLabel-内容操作.py
- QLabel-信号.py
36 QLCDNumber
37 QProgressBar
- QProgressBar-进度条控件.md
- QProgressBar-基本、区间范围和当前数值.py
- QProgressBar-文本格式设置.py
- QProgressBar-文本标签操作、方向、反转.py
- QProgressBar-信号.py
40 QMessageBox
41 Layout
- Layout-布局管理器.md
- Layout-简单使用.py
- QBoxLayout-创建、方向、插入、删除.py
- QBoxLayout-空白、伸缩因子.py
- QVBoxLayout、QHBoxLayout.py
- QFormLayout-创建、行操作(1).py
- QFormLayout-行操作(2).py
- QFormLayout-行包装策略、对齐、间距、字段增长策略.py
- QGridLayout-创建、元素操作.py
- QGridLayout-最小列宽行高、拉伸系数、间距控制.py
- QGridLayout-原点角、信息获取.py
- QStackedLayout-创建、添加插入获取控件.py
- QStackedLayout-切换、展示模式、移除控件.py
42 QSS
43 pyqtSignal
44 QMainWindow
- QMainWindow-主窗口控件.md
- QMainWindow-创建.py
- QMainWindow-QMenuBar-菜单栏.py
- QMainWindow-QToolBar-工具栏.py
- QMainWindow-QStatusBar-状态栏.py
45 QDockWidget
47 QListView
- QListView-列表视图.md
- QListView-创建、方向、布局模式.py
- QListView-自动换行、布局间距、对齐、单词省略.py
- QListView-布局网格、大小调整模式、移动.py
48 QTableView
49 QTreeView
50 QTabWidget
- QTabWidget-标签页控件.md
- QTabWidget-创建、父控件关系、标签位置、标签形状.py
- QTabWidget-可移动、可关闭、自动隐藏页签、文档模式.py
- QTabWidget-设置图标、图标尺寸、省略号模式、按钮滚动.py
- QTabWidget-移除页、页不可用、清空页.py
- QTabWidget-信号.py
52 QListWidget
53 QUndoView
54 QHeaderView
共54个目录,249个文件。
代码行数统计工具: github.com/AlDanial/cloc v1.92
Language | files | blank | comment | code |
---|---|---|---|---|
Python | 202 | 2139 | 1539 | 5336 |
Markdown | 51 | 1403 | 0 | 2274 |
-------- | -------- | -------- | -------- | -------- |
SUM: | 253 | 3542 | 1539 | 7610 |