赞
踩
配套学习文档:it项目网www.itprojects.cn
进阶学习文档:la vie - 知乎
学习完上述基本内容后,针对需要使用的模块到对应网站或者百度搜索,参考网站如下:
可以参考PyQt官网的所有模块,地址:Modules — PyQt Documentation v5.15.4
C++具体实现的API文档,地址:https://doc.qt.io/qt-5/qtwidgets-module.html
PyQt中有非常多的功能模块,开发中最常用的功能模块主要有三个:
函数和类 | 使用项目数 |
---|---|
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模块,常用函数和类
- 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()
(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_())
内容外边距
(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对象
(1)显示和关闭事件
(2)移动事件
moveEvent(QMoveEvent)
(3)调整大小
resizeEvent(QResizeEvent)
(4)鼠标事件
(5)键盘事件
(6)焦点事件
(7)拖拽事件
(8)绘制事件
显示控件,更新控件时调用
paintEvent(QPaintEvent)
(9)改变事件
changeEvent(QEvent)
(10)右键菜单
访问右键菜单时调用
contextMenuEvent(QContextMenuEvent)
(11)输入法
inputMethodEvent(QInputMethodEvent)
(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
-
Qt开发技术:图形视图框架(一)基本介绍_长沙红胖子Qt的博客-CSDN博客_qt显示框架
Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解_长沙红胖子Qt的博客-CSDN博客_qt场景视图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。