PyQt5学习总结

1.基本学习方法 

学习视频:01-Qt介绍_哔哩哔哩_bilibili

配套学习文档:it项目网www.itprojects.cn

进阶学习文档:la vie - 知乎

学习完上述基本内容后,针对需要使用的模块到对应网站或者百度搜索,参考网站如下:

可以参考PyQt官网的所有模块,地址:Modules — PyQt Documentation v5.15.4

C++具体实现的API文档,地址:https://doc.qt.io/qt-5/qtwidgets-module.html

2.主体模块介绍

PyQt中有非常多的功能模块,开发中最常用的功能模块主要有三个:

  • QtCore:包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用
  • QtGui:包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类
  • QtWidgets:包含了一些列创建桌面应用的UI元素

2.1QtWidgets

2.1.1QtWidgets.QWidget基本介绍

  • 所有可视化控件的基类
  • 是一个最简单的空白控件
  • 控件是用户界面最小的元素
  • 接受各种事件,鼠标,键盘
  • 绘制在桌面上,展示给用户看
  • 每一个控件都是矩形的,它们按照Z轴顺序排序
  • 控件由其父控件和前面的控件剪切
  • 没有父控件的控件,称之为窗口
函数和类使用项目数
1. QApplication()用在(261)个项目中
2. QWidget()用在(215)个项目中
3. QLabel()用在(199)个项目中
4. QPushButton()用在(192)个项目中
5. QVBoxLayout()用在(169)个项目中
6. QLineEdit()用在(150)个项目中
7. QMainWindow()用在(147)个项目中
8. QHBoxLayout()用在(142)个项目中
9. QAction()用在(118)个项目中
10. QComboBox()用在(117)个项目中
11. QGridLayout()用在(113)个项目中
12. QMenu()用在(99)个项目中
13. QDialog()用在(93)个项目中
14. QCheckBox()用在(88)个项目中
15. QMenuBar()用在(84)个项目中
16. QTabWidget()用在(82)个项目中
17. QStatusBar()用在(80)个项目中
18. QFrame()用在(75)个项目中
19. QSizePolicy()用在(75)个项目中
20. QGroupBox()用在(71)个项目中
21. QSpacerItem()用在(65)个项目中
22. QTextEdit()用在(59)个项目中
23. QSpinBox()用在(59)个项目中
24. QListWidget()用在(57)个项目中
25. QProgressBar()用在(56)个项目中
26. QRadioButton()用在(49)个项目中
27. QPlainTextEdit()用在(47)个项目中
28. QTableWidgetItem()用在(45)个项目中
29. QTextBrowser()用在(43)个项目中
30. QTableWidget()用在(42)个项目中
31. QFormLayout()用在(38)个项目中
32. QSplitter()用在(37)个项目中
33. QDialogButtonBox()用在(37)个项目中
34. QSlider()用在(36)个项目中
35. QScrollArea()用在(35)个项目中
36. QListWidgetItem()用在(33)个项目中
37. QMessageBox()用在(33)个项目中
38. QDoubleSpinBox()用在(32)个项目中
39. QTreeWidget()用在(29)个项目中
40. QStackedWidget()用在(28)个项目中
41. QToolBar()用在(27)个项目中
42. QDesktopWidget()用在(26)个项目中
43. QGraphicsView()用在(26)个项目中
44. QToolButton()用在(25)个项目中
45. QTreeWidgetItem()用在(24)个项目中
46. QTableView()用在(23)个项目中
47. QTreeView()用在(22)个项目中
48. QDockWidget()用在(21)个项目中
49. QGraphicsScene()用在(21)个项目中
50. QFileDialog()用在(17)个项目中
51. QListView()用在(17)个项目中
52. QButtonGroup()用在(16)个项目中
53. QSystemTrayIcon()用在(14)个项目中
54. QLCDNumber()用在(12)个项目中
55. QGraphicsTextItem()用在(11)个项目中
56. QProgressDialog()用在(11)个项目中
57. QActionGroup()用在(11)个项目中
58. QDateTimeEdit()用在(10)个项目中
59. QShortcut()用在(9)个项目中
60. QCompleter()用在(7)个项目中
61. QOpenGLWidget()用在(7)个项目中
62. QGraphicsObject()用在(7)个项目中
63. QWizardPage()用在(7)个项目中
64. QScrollBar()用在(6)个项目中
65. QGraphicsPathItem()用在(6)个项目中
66. QFileSystemModel()用在(6)个项目中
67. QDateEdit()用在(5)个项目中
68. QFontComboBox()用在(5)个项目中
69. QGraphicsLineItem()用在(5)个项目中
70. QGraphicsRectItem()用在(5)个项目中

参考:Python PyQt5.QtWidgets模块,常用函数和类 

2.1.2QtWidgets.QWidget控件创建

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton

if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = QWidget()

    # 设置窗口标题
    w.setWindowTitle("第一个PyQt程序")

    # 在窗口里面添加控件
    btn = QPushButton("按钮")

    # 设置按钮的父亲是当前窗口,等于是添加到窗口中显示
    btn.setParent(w)

    # 展示窗口
    w.show()

    # 程序进行循环等待状态
    app.exec()

2.1.3QtWidgets.QWidget大小位置

(1)理论支撑:控件的坐标系统

 (2)API

关于获取元素的API:

注意一下:这里的xy指的是顶层控件相当于桌面的相对位置,而weight与height是除去窗口框架的内容尺寸。 

关于设置相关API:

 注意:resize改的是用户区域的尺寸,setGeometry()函数必须等待显示成功之后再发挥作用。

import sys
from PyQt5.Qt import *



if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()

    # print(QWidget.__bases__)   #打印他的父类  也可以安装ctrl键 鼠标点击即可查看
    # print(QWidget.mro())   # 向上查看所有的类 链条式

    window.show()

    # 设置的是用户区域(去除框架部分)  前两个坐标是用户区域的坐标,后两个坐标是用户区域的尺寸
    # 但是,必须这行代码必须设置在show()函数后面,等显示成功时再去包装它
    window.setGeometry(0,0,150,150)

    # 应用程序执行,进入到消息循环
    sys.exit(app.exec_())


import sys
from PyQt5.Qt import *



if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()

    # print(QWidget.__bases__)   #打印他的父类  也可以安装ctrl键 鼠标点击即可查看
    # print(QWidget.mro())   # 向上查看所有的类 链条式

    window.move(200,100)
    window.resize(500,500)

    label = QLabel(window)
    label.setText("社会顺")
    label.move(100,100)
    label.setStyleSheet("background-color:cyan;")


    def Cao1():
        new_content = label.text() + "社会顺"
        label.setText(new_content)
        label.adjustSize()  # 自适应调整大小

    btn = QPushButton(window)
    btn.setText("增加内容")
    btn.move(100,300)

    btn.clicked.connect(Cao1)

    window.show()

    # 设置的是用户区域(去除框架部分)  前两个坐标是用户区域的坐标,后两个坐标是用户区域的尺寸
    # 但是,必须这行代码必须设置在show()函数后面,等显示成功时再去包装它
    # window.setGeometry(0,0,150,150)

    # 应用程序执行,进入到消息循环
    sys.exit(app.exec_())


最大和最小尺寸

import sys
from PyQt5.Qt import *


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window  = QWidget()

    window.setWindowTitle("最大最小尺寸")

    window.setMaximumSize(500,500)
    window.setMinimumSize(100,100)

    window.show()

    sys.exit(app.exec_())

内容外边距

2.1.4QtWidgets.QWidget鼠标事件

(1)设置鼠标形状

import sys
from PyQt5.Qt import *


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window  = QWidget()
    window.setWindowTitle("内容边距的设定")
    window.resize(500,500)



    # window.setCursor(Qt.ForbiddenCursor)
    label = QLabel(window)
    label.setText("Hello Neo")
    label.resize(100,100)
    label.setStyleSheet("background-color:cyan;")

    
    label.setCursor(Qt.ForbiddenCursor)



    window.show()

    sys.exit(app.exec_())

 (2)重置形状
unsetCursor()

(3)获取鼠标
cursor()->QCursor

(4)鼠标跟踪

(5)QCursor对象

  • pixmap()
  • pos()
  • setPos(x,y)

2.1.5QtWidgets.QWidget鼠标事件

(1)显示和关闭事件

(2)移动事件

moveEvent(QMoveEvent)

(3)调整大小

resizeEvent(QResizeEvent)

(4)鼠标事件

(5)键盘事件

(6)焦点事件

(7)拖拽事件

(8)绘制事件

显示控件,更新控件时调用

paintEvent(QPaintEvent)

(9)改变事件

changeEvent(QEvent)

(10)右键菜单

访问右键菜单时调用

contextMenuEvent(QContextMenuEvent)

(11)输入法

inputMethodEvent(QInputMethodEvent)

3.各窗体详解

3.1布局控件

3.1.1QtWidgets.QGridLayout()

(1)addWidget

https://doc.qt.io/qt-5/qgridlayout.html#addWidget-1

可以看到有2个重载版本:
1.void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
Adds the given widget to the cell grid at row, column. The top-left position is (0, 0) by default.

The alignment is specified by alignment. The default alignment is 0, which means that the widget fills the entire cell.
翻译:
将给定的小部件添加到单元格网格的行、列。默认情况下,左上角位置为(0,0)。
对齐由对齐指定。默认对齐方式为0,这意味着小部件将填充整个单元格。

2.void QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

翻译:
此版本将给定的小部件添加到单元格网格,跨越多行/列。该单元格将从fromRow、fromColumn开始,跨越rowSpan行和columnSpan列。小部件将具有给定的对齐方式。
如果rowSpan和/或columnSpan为-1,则小部件将分别扩展到底部和/或右边缘。

使用方法

1.第一个版本

void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
这个版本对应的行列规则的情况。

QGridLayout* gridlayout=new QGridLayout;
	gridlayout->addWidget(m_lab_Near, 0, 0);
	gridlayout->addWidget(m_spinbox_Near, 0, 1);
	gridlayout->addWidget(m_lab_Far, 1, 0);
	gridlayout->addWidget(m_spinbox_Far, 1, 1);

2.第二个版本
void QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
这个版本对应行列不规则的情况

如上图,红色表示坐标,窗口1横向跨越了2个单元格,那么 int rowSpan = 2 ;纵向跨越了2个单元格, 那么int columnSpan = 2

此窗口产生的代码如下:

    QGridLayout* gridLayout = new QGridLayout;
	QWidget widget1;
	QWidget widget2;
	QWidget widget3;
	QWidget widget4;
	QWidget widget5;
	QWidget widget6;
    
    gridLayout->addWidget(widgets1, 0, 0, 2, 2);       //窗口1
    gridLayout->addWidget(widgets2, 0, 2, 1, 1);       //窗口2
    gridLayout->addWidget(widgets3, 1, 2, 1, 1);       //窗口3
    gridLayout->addWidget(widgets4, 2, 0, 1, 1);       //窗口4
    gridLayout->addWidget(widgets5, 2, 1, 1, 1);       //窗口5
    gridLayout->addWidget(widgets6, 2, 2, 1, 1);       //窗口6

3.2图片展示交互控件Graphics

3.1QGraphicsScene、QGraphicsItem与QGraphicsView

Qt开发技术:图形视图框架(一)基本介绍_长沙红胖子Qt的博客-CSDN博客_qt显示框架

Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解_长沙红胖子Qt的博客-CSDN博客_qt场景视图

4.额外安装模块

3.1Qchart 

参考

QGridLayout::addWidget 的使用详解_妙为的博客-CSDN博客_qt addwidget

PyQt5学习笔记-QWidget学习_Moonpie月饼的博客-CSDN博客_pyqt5 qwidget

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值