PyQt_practice
PyQt_practice copied to clipboard
通过可直接运行的代码示例讲解 PyQt 5 常用基础控件。附学习资源、demo分享。
PyQt5 代码笔记
用代码学 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 归档并解压 - 创建虚拟环境并激活
- Windows:
python -m venv venvvenv\Scripts\activate - Linux/macOS:
python3 -m venv venv. venv/bin/activate
- Windows:
- 在命令行执行
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 相关分享
一些 PyQt 相关文档、教程、Demo、QSS 美化等收集整理
打赏
如果本项目对你有帮助,希望可以请我喝一杯冰可乐 :beer:。

仓库文件目录
01 PyQt基本结构
- PyQt5-初体验.py
- PyQt5程序基本结构分析.py
- 面向对象版本代码.py
- 控件类的继承关系.py
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
04 QAbstractButton
- 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
- QRadioButton-单选按钮.md
- QRadioButton-创建和基本设置、信号.py
- QRadioButton-多组互斥问题.py
08 QButtonGroup
- QButtonGroup-按钮组.md
- QButtonGroup-创建与使用.py
- QButtonGroup-查看按钮、移除按钮、id操作、取消独占.py
- QButtonGroup-信号.py
09 QCheckBox
- QCheckButton-复选框.md
- QCheckBox-功能使用.py
- QCheckBox-信号.py
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
- QFrame-框架控件的基类.md
- QFrame-创建.py
- QFrame-功能作用.py
12 QAbstractScrollArea
- QAbstractScrollArea-滚动区域的低级抽象.md
- QAbstractScrollArea.py
13 QTextEdit
- QTextEdit-文本编辑器.md
- QTextEdit-创建.py
- QTextEdit-占位文本的设置.py
- QTextEdit-文本内容的设置.py
- QTextEdit-文本光标-插入文字、图片、句子.py
- QTextEdit-文本光标-插入列表.py
- QTextEdit-文本光标-插入表格.py
- QTextEdit-文本光标-插入文本块.py
- QTextEdit-文本光标-插入文本框架.py
- QTextEdit-文本光标-格式操作.py
14 QPlainTextEdit
- QPlainTextEdit-纯文本编辑器.md
- QPlainTextEdit-创建、占位提示文本、只读、字符格式.py
- QPlainTextEdit-软换行、覆盖模式、tab控制.py
- QPlainTextEdit-文本操作、块操作.py
- QPlainTextEdit-放大缩小、滚动内容以显示光标.py
- QPlainTextEdit-光标操作.py
- QPlainTextEdit-信号.py
- QPlainTextEdit-案例-显示行号.py
15 QKeySequenceEdit
- QKeySequenceEdit-快捷键编辑器.md
- QKeySequenceEdit-创建、功能、信号.py
- QKeySequence-补充.py
16 QAbstractSpinBox
- QAbstractSpinBox-数字设定框的抽象基类.md
- QAbstractSpinBox-创建、模拟子类化、获取与设置控件内容.py
- QAbstractSpinBox-长按累加加速、只读.py
- QAbstractSpinBox-对齐方式、周边框架、清空文本内容、按钮标识.py
- QAbstractSpinBox-内容验证、信号.py
17 QSpinBox
- QSpinBox-数字设定框.md
- QSpinBox-创建、最大值最小值范围、数值循环.py
- QSpinBox-步长设置、前后缀和特殊文本、进制设置.py
- QSpinBox-值的设置和获取、自定义展示格式.py
- QSpinBox-信号.py
18 QDoubleSpinBox
- QDoubleSpinBox-浮点数设定框.md
- QDoubleSpinBox-创建、数值范围、数值循环、设置步长、前后缀.py
- QDoubleSpinBox-最小值特殊文本、小数位数、设置与获取数值、自定义展示格式.py
- QDoubleSpinBox-信号.py
19 QDateTimeEdit
- QDateTimeEdit-日期时间编辑器.md
- QDateTime、QDate、QTime.py
- QDateTimeEdit-创建、显示格式、section操作.py
20 QDateEdit
- QDateEdit-日期编辑器.md
21 QTimeEdit
- QTimeEdit-时间编辑器.md
22 QComboBox
- QComboBox-组合下拉框.md
- QComboBox-创建、数据操作.py
- QComboBox-模型操作、视图操作.py
- QComboBox-数据获取.py
- QComboBox-数据限制.py
- QComboBox-功能.py
- QComboBox-信号.py
- QComboBox-案例.py
23 QFontComboBox
- QFontComboBox-字体下拉框.md
- QFontComboBox-功能作用.py
24 QAbstractSlider
- QAbstractSlider-滑块控件抽象基类.md
- QAbstractSlider-创建、数值范围、当前数值、步长.py
- QAbstractSlider-是否追踪、滑块位置、倒立外观、操作反转、滑块方向.py
- QAbstractSlider-是否按下、信号.py
25 QSlider
- QSlider-滑块控件.md
- QSlider-刻度控制.py
- QSlider-拓展案例.py
- QSlider-鼠标跳转优化.py
26 QScrollBar
- QScrollBar-滚动条.md
- QScrollBar-功能作用.py
27 QDial
- QDial-转盘控件.md
- QDial-功能作用.py
28 QRubberBand
- QRubberBand-选择框线.md
- QRubberBand-创建.py
- QRubberBand-综合案例.py
29 QDialog
- QDialog-对话框窗口基类.md
- QDialog-模态与非模态、创建.py
- QDialog-是否显示尺寸调整控件、常用操作槽、设置和获取数值.py
- QDialog-信号.py
30 QFontDialog
- QFontDialog-字体选择对话框.md
- QFontDialog-创建.py
- QFontDialog-弹出方式、选项控制.py
- QFontDialog-静态方法.py
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
- QInputDialog-输入对话框.md
- QInputDialog-静态方法.py
- QInputDialog-创建、功能作用.py
- QInputDialog-信号.py
34 QCalendarWidget
- QCalendarWidget-日历控件.md
35 QLabel
- QLabel-标签控件.md
- QLabel-创建、对齐、间距、缩进.py
- QLabel-文本格式、伙伴.py
- QLabel-内容缩放(图片).py
- QLabel-文本交互标识和选中.py
- QLabel-外部链接、换行.py
- QLabel-内容操作.py
- QLabel-信号.py
36 QLCDNumber
- QLCDNumber-液晶数字显示器.md
37 QProgressBar
- QProgressBar-进度条控件.md
- QProgressBar-基本、区间范围和当前数值.py
- QProgressBar-文本格式设置.py
- QProgressBar-文本标签操作、方向、反转.py
- QProgressBar-信号.py
38 QErrorMessage
- QErrorMessage-错误消息对话框.md
- QErrorMessage-创建、功能作用.py
- QErrorMessage-Debug.py
39 QProgressDialog
- QProgressDialog-进度条对话框.md
- QProgressDialog-创建.py
- QProgressDialog-最小等待时间、窗口标题、设置子控件.py
40 QMessageBox
- QMessageBox-消息提示框.md
- QMessageBox-创建.py
- QMessageBox-按钮操作.py
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
- QSS-Qt样式表.md
- QSS-简介.py
- QSS-导入外部样式表.py
43 pyqtSignal
- pyqtSignal-自定义信号.py
- pyqtSignal-重载、多个参数.py
- pyqtSignal-装饰器自动连接.py
44 QMainWindow
- QMainWindow-主窗口控件.md
- QMainWindow-创建.py
- QMainWindow-QMenuBar-菜单栏.py
- QMainWindow-QToolBar-工具栏.py
- QMainWindow-QStatusBar-状态栏.py
45 QDockWidget
- QDockWidget-浮动停靠控件.md
46 QAbstractItemView
- QAbstractItemView-项目视图的抽象基类.md
47 QListView
- QListView-列表视图.md
- QListView-创建、方向、布局模式.py
- QListView-自动换行、布局间距、对齐、单词省略.py
- QListView-布局网格、大小调整模式、移动.py
48 QTableView
- QTableView-表格视图.md
49 QTreeView
- QTreeView-树视图.md
50 QTabWidget
- QTabWidget-标签页控件.md
- QTabWidget-创建、父控件关系、标签位置、标签形状.py
- QTabWidget-可移动、可关闭、自动隐藏页签、文档模式.py
- QTabWidget-设置图标、图标尺寸、省略号模式、按钮滚动.py
- QTabWidget-移除页、页不可用、清空页.py
- QTabWidget-信号.py
51 QStackedWidget
- QStackedWidget-堆载窗口控件.md
52 QListWidget
- QListWidget-列表控件.md
53 QUndoView
- QUndoView-撤销视图控件.md
54 QHeaderView
- QHeaderView-表头视图.md
共54个目录,249个文件。
代码行数统计工具: github.com/AlDanial/cloc v1.92
| Language | files | blank | comment | code |
|---|---|---|---|---|
| Python | 202 | 2328 | 1540 | 5301 |
| Markdown | 51 | 1410 | 0 | 2295 |
| -------- | -------- | -------- | -------- | -------- |
| SUM: | 253 | 3738 | 1540 | 7596 |
