Skip to content

Latest commit

 

History

History
551 lines (403 loc) · 32.5 KB

README.md

File metadata and controls

551 lines (403 loc) · 32.5 KB

logo

PyQt5 代码笔记

用代码学 PyQt5 !

PyQt Version license Github stars GitHub forks Code style: black Imports: isort

重要说明!!

新版 「PySide6 代码教程」 初稿已经接近完成!本项目的更新也渐趋结束,新内容的补充完善会集中在新版教程。

新教程有如下升级:

  • Python 3.10 + PySide 6.3,版本新、功能更强大
  • 项目组织结构更清晰
  • 代码中注释讲解比例更高、更详细
  • PySide 由 Qt 官方提供支持,比 PyQt 许可更宽松、文档更全面

欢迎新老读者前往阅读和提供贡献!

基本说明

  • 每个模块(.py文件)都可运行,展示了各种控件的各种功能属性作用,代码中有注释讲解
  • 在自己的机器上实际运行一下,仔细观察一下每个属性值的改变会怎样影响控件的外观行为,可能比静态的文档教程更有效。
  • 目前还在更新完善中,也期待小伙伴加入,共同完善这个仓库(提交 PR 或者 联系作者
  • 由于作者精力有限,Gitee仓库 的更新维护可能不及时,最新修改以 GitHub仓库 为准

使用方法

  1. Star 收藏本仓库,便于查找
  2. 克隆本仓库到本地( git clone https://github.com/muziing/PyQt_practice.git ),或下载 zip 归档并解压
  3. 创建虚拟环境并激活
    • Windows: python -m venv venv venv\Scripts\activate
    • Linux/macOS: python3 -m venv venv . venv/bin/activate
  4. 在命令行执行 pip install -r requirements.txt 安装依赖
  5. 进入你感兴趣的控件对应的文件夹,运行任何一个.py文件观察效果
  6. 对于大多数目录,首个文件都是一个 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_())
  1. 直接运行这段代码即可看到程序窗口和上面的 QListView 控件
  2. 注释/取消注释第 26 行代码,以观察自动换行属性的效果
  3. 按下"增大Spacing"按钮,以观察不同的 Spacing 值的显示效果
  4. 每次注释掉40/41行代码中的一个,运行另一行,以观察不同的 ItemAlignment 值的对齐效果
  5. 每次注释掉45/46/47行代码中的一个,运行剩下的那行,以观察不同的省略号模式的效果
  6. 在同一目录(47-QListView)下的第一个文件 00-QListView-列表视图.md 中查看更多信息

PyQt 相关分享

一些 PyQt 相关文档、教程、Demo、QSS 美化等收集整理

GitHub PyQt 相关仓库收集

打赏

如果本项目对你有帮助,希望可以请喝一杯冰可乐 🍺。

微信收款码

点击图片以在线浏览带有超链接的思维导图

思维导图目录

  1. PyQt5-初体验.py
  2. PyQt5程序基本结构分析.py
  3. 面向对象版本代码.py
  4. 控件类的继承关系.py
  1. QObject.py
  2. QObject_2.py
  3. 信号的操作.py
  4. 信号的操作(小案例1).py
  5. 信号的操作(小案例2).py
  6. QObject类型判定.py
  7. QObject类型判定-案例.py
  8. QObject对象删除.py
  9. PyQt事件机制.py
  10. QObject定时器.py
  11. QObject定时器-案例.py
  1. QWidget-用户界面的基类.md
  2. QWidget-简介.py
  3. QWidget-大小位置.py
  4. QWidget-案例.py
  5. QWidget-最大最小尺寸-API.py
  6. QWidget-内容边距操作.py
  7. QWidget-鼠标相关操作.py
  8. QWidget-鼠标跟踪-API.py
  9. QWidget-鼠标相关操作-案例.py
  10. QWidget-案例1-鼠标移入移出.py
  11. QWidget-案例2-键盘点击案例.py
  12. QWidget-案例3-鼠标拖动窗口案例.py
  13. QWidget-父子关系-API.py
  14. QWidget-父子关系-案例.py
  15. QWidget-层级关系调整.py
  16. QWidget-顶层窗口相关操作.py
  17. QWidget-窗口状态.py
  18. QWidget-窗口最大化最小化、WindowFlags笔记.py
  19. QWidget-顶层窗口操作-案例.py
  20. QWidget-交互状态-显示隐藏控件、设置控件不可用.py
  21. QWidget-交互状态-是否被编辑、是否为活动窗口.py
  22. QWidget-交互状态-关闭与释放.py
  23. QWidget-交互状态-案例-登录界面.py
  24. QWidget-信息提示.py
  25. QWidget-焦点控制.py
  1. QAbstractButton-按钮的抽象基类.md
  2. QAbstractButton-简单介绍.py
  3. QAbstractButton-功能测试.py
  4. QAbstractButton-状态设置.py
  5. QAbstractButton-排他性.py
  6. QAbstractButton-模拟点击.py
  7. QAbstractButton-点击有效区域.py
  8. QAbstractButton-可用信号.py
  1. QPushButton-普通按钮.md
  2. QPushButton-构造函数.py
  3. QPushButton-菜单.py
  4. QPushButton-扁平化.py
  5. QPushButton-默认处理.py
  6. QPushButton-右键菜单.py
  7. QCommandLinkButton.py
  1. QToolButton-工具栏按钮.md
  2. QToolButton-创建与基本显示.py
  3. QToolButton-样式设置.py
  4. QToolButton-箭头.py
  5. QToolButton-自动提升.py
  6. QToolButton-菜单和弹出模式.py
  7. QToolButton-可用信号.py
  1. QRadioButton-单选按钮.md
  2. QRadioButton-创建和基本设置、信号.py
  3. QRadioButton-多组互斥问题.py
  1. QButtonGroup-按钮组.md
  2. QButtonGroup-创建与使用.py
  3. QButtonGroup-查看按钮、移除按钮、id操作、取消独占.py
  4. QButtonGroup-信号.py
  1. QCheckButton-复选框.md
  2. QCheckBox-功能使用.py
  3. QCheckBox-信号.py
  1. QLineEdit-单行文本编辑器.md
  2. QLineEdit-创建、插入与获取内容.py
  3. QLineEdit-文本的设置与获取-案例.py
  4. QLineEdit-文本输出模式.py
  5. QLineEdit-登录案例.py
  6. QLineEdit-占位文本设置、清空按钮.py
  7. QLineEdit-添加自定义行为-明密文切换.py
  8. QLineEdit-自动补全.py
  9. QLineEdit-长度和只读限制.py
  10. QLineEdit-验证器的使用.py
  11. QLineEdit-验证器-掩码.py
  12. QLineEdit-文本修改状态.py
  13. QLineEdit-光标位置控制.py
  14. QLineEdit-文本边距设定.py
  15. QLineEdit-对齐方式.py
  16. QLineEdit-编辑功能.py
  17. QLineEdit-编辑功能-选中.py
  18. QLineEdit-信号.py
  1. QFrame-框架控件的基类.md
  2. QFrame-创建.py
  3. QFrame-功能作用.py
  1. QAbstractScrollArea-滚动区域的低级抽象.md
  2. QAbstractScrollArea.py
  1. QTextEdit-文本编辑器.md
  2. QTextEdit-创建.py
  3. QTextEdit-占位文本的设置.py
  4. QTextEdit-文本内容的设置.py
  5. QTextEdit-文本光标-插入文字、图片、句子.py
  6. QTextEdit-文本光标-插入列表.py
  7. QTextEdit-文本光标-插入表格.py
  8. QTextEdit-文本光标-插入文本块.py
  9. QTextEdit-文本光标-插入文本框架.py
  10. QTextEdit-文本光标-格式操作.py
  1. QPlainTextEdit-纯文本编辑器.md
  2. QPlainTextEdit-创建、占位提示文本、只读、字符格式.py
  3. QPlainTextEdit-软换行、覆盖模式、tab控制.py
  4. QPlainTextEdit-文本操作、块操作.py
  5. QPlainTextEdit-放大缩小、滚动内容以显示光标.py
  6. QPlainTextEdit-光标操作.py
  7. QPlainTextEdit-信号.py
  8. QPlainTextEdit-案例-显示行号.py
  1. QKeySequenceEdit-快捷键编辑器.md
  2. QKeySequenceEdit-创建、功能、信号.py
  3. QKeySequence-补充.py
  1. QAbstractSpinBox-数字设定框的抽象基类.md
  2. QAbstractSpinBox-创建、模拟子类化、获取与设置控件内容.py
  3. QAbstractSpinBox-长按累加加速、只读.py
  4. QAbstractSpinBox-对齐方式、周边框架、清空文本内容、按钮标识.py
  5. QAbstractSpinBox-内容验证、信号.py
  1. QSpinBox-数字设定框.md
  2. QSpinBox-创建、最大值最小值范围、数值循环.py
  3. QSpinBox-步长设置、前后缀和特殊文本、进制设置.py
  4. QSpinBox-值的设置和获取、自定义展示格式.py
  5. QSpinBox-信号.py
  1. QDoubleSpinBox-浮点数设定框.md
  2. QDoubleSpinBox-创建、数值范围、数值循环、设置步长、前后缀.py
  3. QDoubleSpinBox-最小值特殊文本、小数位数、设置与获取数值、自定义展示格式.py
  4. QDoubleSpinBox-信号.py
  1. QDateTimeEdit-日期时间编辑器.md
  2. QDateTime、QDate、QTime.py
  3. QDateTimeEdit-创建、显示格式、section操作.py
  1. QDateEdit-日期编辑器.md
  1. QTimeEdit-时间编辑器.md
  1. QComboBox-组合下拉框.md
  2. QComboBox-创建、数据操作.py
  3. QComboBox-模型操作、视图操作.py
  4. QComboBox-数据获取.py
  5. QComboBox-数据限制.py
  6. QComboBox-功能.py
  7. QComboBox-信号.py
  8. QComboBox-案例.py
  1. QFontComboBox-字体下拉框.md
  2. QFontComboBox-功能作用.py
  1. QAbstractSlider-滑块控件抽象基类.md
  2. QAbstractSlider-创建、数值范围、当前数值、步长.py
  3. QAbstractSlider-是否追踪、滑块位置、倒立外观、操作反转、滑块方向.py
  4. QAbstractSlider-是否按下、信号.py
  1. QSlider-滑块控件.md
  2. QSlider-刻度控制.py
  3. QSlider-拓展案例.py
  4. QSlider-鼠标跳转优化.py
  1. QScrollBar-滚动条.md
  2. QScrollBar-功能作用.py
  1. QDial-转盘控件.md
  2. QDial-功能作用.py
  1. QRubberBand-选择框线.md
  2. QRubberBand-创建.py
  3. QRubberBand-综合案例.py
  1. QDialog-对话框窗口基类.md
  2. QDialog-模态与非模态、创建.py
  3. QDialog-是否显示尺寸调整控件、常用操作槽、设置和获取数值.py
  4. QDialog-信号.py
  1. QFontDialog-字体选择对话框.md
  2. QFontDialog-创建.py
  3. QFontDialog-弹出方式、选项控制.py
  4. QFontDialog-静态方法.py
  1. QColorDialog-颜色选择对话框.md
  2. QColorDialog-创建.py
  3. QColorDialog-功能作用.py
  4. QColorDialog-静态方法.py
  5. QColorDialog-信号.py
  1. QFileDialog-文件选择对话框.md
  2. QFileDialog-静态方法-弹出文件操作对话框.py
  3. QFileDialog-静态方法-弹出文件夹操作对话框.py
  4. QFileDialog-构造函数、接收模式、默认后缀名、文件模式.py
  5. QFileDialog-名称过滤器、显示信息详细程度、设置指定角色的标签名称.py
  6. QFileDialog-信号.py
  1. QInputDialog-输入对话框.md
  2. QInputDialog-静态方法.py
  3. QInputDialog-创建、功能作用.py
  4. QInputDialog-信号.py
  1. QCalendarWidget-日历控件.md
  1. QLabel-标签控件.md
  2. QLabel-创建、对齐、间距、缩进.py
  3. QLabel-文本格式、伙伴.py
  4. QLabel-内容缩放(图片).py
  5. QLabel-文本交互标识和选中.py
  6. QLabel-外部链接、换行.py
  7. QLabel-内容操作.py
  8. QLabel-信号.py
  1. QLCDNumber-液晶数字显示器.md
  1. QProgressBar-进度条控件.md
  2. QProgressBar-基本、区间范围和当前数值.py
  3. QProgressBar-文本格式设置.py
  4. QProgressBar-文本标签操作、方向、反转.py
  5. QProgressBar-信号.py
  1. QErrorMessage-错误消息对话框.md
  2. QErrorMessage-创建、功能作用.py
  3. QErrorMessage-Debug.py
  1. QProgressDialog-进度条对话框.md
  2. QProgressDialog-创建.py
  3. QProgressDialog-最小等待时间、窗口标题、设置子控件.py
  1. QMessageBox-消息提示框.md
  2. QMessageBox-创建.py
  3. QMessageBox-按钮操作.py
  1. Layout-布局管理器.md
  2. Layout-简单使用.py
  3. QBoxLayout-创建、方向、插入、删除.py
  4. QBoxLayout-空白、伸缩因子.py
  5. QVBoxLayout、QHBoxLayout.py
  6. QFormLayout-创建、行操作(1).py
  7. QFormLayout-行操作(2).py
  8. QFormLayout-行包装策略、对齐、间距、字段增长策略.py
  9. QGridLayout-创建、元素操作.py
  10. QGridLayout-最小列宽行高、拉伸系数、间距控制.py
  11. QGridLayout-原点角、信息获取.py
  12. QStackedLayout-创建、添加插入获取控件.py
  13. QStackedLayout-切换、展示模式、移除控件.py

42 QSS

  1. QSS-Qt样式表.md
  2. QSS-简介.py
  3. QSS-导入外部样式表.py
  1. pyqtSignal-自定义信号.py
  2. pyqtSignal-重载、多个参数.py
  3. pyqtSignal-装饰器自动连接.py
  1. QMainWindow-主窗口控件.md
  2. QMainWindow-创建.py
  3. QMainWindow-QMenuBar-菜单栏.py
  4. QMainWindow-QToolBar-工具栏.py
  5. QMainWindow-QStatusBar-状态栏.py
  1. QDockWidget-浮动停靠控件.md
  1. QAbstractItemView-项目视图的抽象基类.md
  1. QListView-列表视图.md
  2. QListView-创建、方向、布局模式.py
  3. QListView-自动换行、布局间距、对齐、单词省略.py
  4. QListView-布局网格、大小调整模式、移动.py
  1. QTableView-表格视图.md
  1. QTreeView-树视图.md
  1. QTabWidget-标签页控件.md
  2. QTabWidget-创建、父控件关系、标签位置、标签形状.py
  3. QTabWidget-可移动、可关闭、自动隐藏页签、文档模式.py
  4. QTabWidget-设置图标、图标尺寸、省略号模式、按钮滚动.py
  5. QTabWidget-移除页、页不可用、清空页.py
  6. QTabWidget-信号.py
  1. QStackedWidget-堆载窗口控件.md
  1. QListWidget-列表控件.md
  1. QUndoView-撤销视图控件.md
  1. 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