PyQt Widgets
1 简介与安装
1.1 Python 图形界面开发的几种选择
- Tkinter: 基于 Tk,稳定,但控件少,适用于小型应用开发;
- wxPython: 基于 wxWidgets,文档与用户少,不适用于大型应用开发;
- PySide2/PySide6/PyQt5/PyQt6: 基于 Qt,控件丰富,文档与用户多,适用于大型应用开发。
1.2 在PyCharm 中配置 PyQt5
- 在 Python 环境中安装 PyQt5:
pip install pyqt5-tools
- 文件 > 设置 > 外部工具中配置与使用 QtDesigner、PyUIC、Pyrcc:
- QtDesigner
Program: Python 环境下的 designer.exe
- PyUIC
Program: Python 环境下的 python.exe
Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
- Pyrcc
Program: Python 环境下 Scripts 文件夹中的 pyrcc5.exe
Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
.ui 文件转 .py 文件:
- 点击 EXternal Tools 里面的 QTDesigner,跳转到QT界面,保存为 .ui 文件;
- 选中文件,鼠标右击,点击 EXternal Tools 里面的 PyUIC,生成 .py 文件。
2 Qt Designer 中的组件介绍
2.1 Layouts
2.1.1 Vertical Layout
- 类名:
QVBoxLayout - 功能:将其内部组件垂直排列
- 示例:window = QWidget()
button1 = QPushButton(“One”)
button2 = QPushButton(“Two”)
button3 = QPushButton(“Three”)
button4 = QPushButton(“Four”)
button5 = QPushButton(“Five”)
layout = QVBoxLayout()
layout.addWidget(button1)
layout.addWidget(button2)
layout.addWidget(button3)
layout.addWidget(button4)
layout.addWidget(button5)
window.setLayout(layout)
window.show() - 函数:
QVBoxLayoutQVBoxLayout(parent)
功能:在父组件 parent 中构造布局 QVBoxLayout
参数:
parent: QWidget
2.1.2 Horizontal Layout
- 类名:
QHBoxLayout - 功能:将其内部组件水平排列
- 示例:window = QWidget()
button1 = QPushButton(“One”)
button2 = QPushButton(“Two”)
button3 = QPushButton(“Three”)
button4 = QPushButton(“Four”)
button5 = QPushButton(“Five”)
layout = QHBoxLayout()
layout.addWidget(button1)
layout.addWidget(button2)
layout.addWidget(button3)
layout.addWidget(button4)
layout.addWidget(button5)
window.setLayout(layout)
window.show() - 函数:
QHBoxLayoutQHBoxLayout(parent)
功能:在父组件 parent 中构造布局 QHBoxLayout
参数:
parent: QWidget
2.1.3 Grid Layout
- 类名:
QGridLayout - 功能:将其内部组件在网格中排列
- 函数:
QGridLayoutQGridLayout(parent)
功能:在父组件 parent 中构造布局 QGridLayout
参数:
parent – QWidgetaddItemaddItem(item, row, column[, rowSpan=1[, columnSpan=1[, alignment=Qt.Alignment()]]])
功能:在位置 row, column 添加 Item,延伸 rowSpan 行和 columnSpan 列,并按照 alignment 对齐。如果 rowSpan 与/或 columnSpan 为 -1,那么 item 将分别拓展到底边界与/或右边界
参数:
item – PySide2.QtWidgets.QLayoutItem
row – int
column – int
rowSpan – int
columnSpan – int
alignment – Alignment警告: 不要使用此函数添加子布局或子组件,应使用 addLayout() 或 addWidget()addLayoutaddLayout(arg__1, row, column[, alignment=Qt.Alignment()])
功能:在栅格的 (row, column) 处放置 arg__1 布局。左上角位置为 (0, 0)。对齐方式由 alignment 定义,默认对齐方式是 0,意味着布局填满整个单元格。非 0 对齐方式表示布局不应该伸展填满可用的空间,而是由 sizeHint() 约定尺寸
参数:
arg__1 – PySide2.QtWidgets.QLayout
row – int
column – int
alignment – AlignmentaddLayoutaddLayout(arg__1, row, column, rowSpan, columnSpan[, alignment=Qt.Alignment()])
功能:重载函数,分别增加了行列跨度参数 rowSpan 和 columnSpan,如果 rowSpan 与/或 columnSpan 为 -1,那么 arg__1 布局将分别拓展到底边界与/或右边界
参数:
arg__1 – PySide2.QtWidgets.QLayout
row – int
column – int
rowSpan – int
columnSpan – int
alignment – AlignmentaddWidgetaddWidget(arg__1, row, column[, alignment=Qt.Alignment()])
功能:在栅格的 (row, column) 处放置 arg__1 组件。左上角位置为 (0, 0)。对齐方式由 alignment 定义,默认对齐方式是 0,意味着组件填满整个单元格
参数:
arg__1 – PySide2.QtWidgets.QWidget
row – int
column – int
alignment – AlignmentaddWidgetaddWidget(arg__1, row, column, rowSpan, columnSpan[, alignment=Qt.Alignment()])
功能:重载函数,分别增加了行列跨度参数 rowSpan 和 columnSpan,如果 rowSpan 与/或 columnSpan 为 -1,那么 arg__1 布局将分别拓展到底边界与/或右边界
参数:
arg__1 – PySide2.QtWidgets.QWidget
row – int
column – int
rowSpan – int
columnSpan – int
alignment – AlignmentcellRectcellRect(row, column)
功能:返回栅格中行为 row,列为 col的单元格的几何形状,如果超出栅格范围则返回无效矩形
参数:
row – int
column – int
返回值:
type – QRect警告:在当前版本的Qt中,此函数在调用 setGeometry() 之前不会返回有效的结果,即在 parentWidget() 可见之后columnCountcolumnCount()
功能:返回栅格中列的数量
返回值:
type – intcolumnMinimumWidthcolumnMinimumWidth(column)
功能:返回 column 列的列间距
参数:
column – int
返回值:
type – intcolumnStretchcolumnStretch(column)
功能:返回 column 列的拉伸因子
参数:
column – int
返回值:
type – intgetItemPositiongetItemPosition(idx)
功能:返回 idx 处的 item 对应的位置信息。变量 row 和 column 通过布局中 item 的位置更新,变量 rowSpan 和 columnSpan 通过 item 垂直和水平跨度更新
参数:
idx – inthorizontalSpacinghorizontalSpacing()
功能:返回水平间距
返回值:
type – intitemAtPositionitemAtPosition(row, column)
功能:返回 (row, column) 单元格的 layout item,如果单元格为空则返回 None
参数:
row – int
column – int
返回值:
type – QLayoutItemoriginCorneroriginCorner()
功能:返回用于栅格初始化的 corner,也就是位置 (0, 0)
返回值:
type – CornerrowCountrowCount()
功能:返回栅格中行的数量
返回值:
type – introwMinimumHeightrowMinimumHeight(row)
功能:返回 row 行设定的最小宽度
参数:
row – int
返回值:
type – introwStretchrowStretch(row)
功能:返回 row 行的拉伸因子
参数:
row – int
返回值:
type – intsetColumnMinimumWidthsetColumnMinimumWidth(column, minSize)
功能:设置 column 列的最小宽度为 minSize 像素
参数:
column – int
minSize – intsetColumnStretchsetColumnStretch(column, stretch)
功能:设置 column 列的拉伸因子为 stretch。第一列为 0。拉伸因子与栅格中其他列有关。有着更高拉伸因子的列占据更多的可用空间。默认的拉伸因子为 0。如果拉伸因子为 0 且这个表格中根本没有其他列,那么这个列可能仍然会扩展。一种可供选择的方法是使用 addItem() 与一个 QSpacer Item 来添加间距
参数:
column – int
stretch – intsetDefaultPositioningsetDefaultPositioning(n, orient)
功能:使用 addItem() 设置位置模式。如果 orient 是水平的,这个布局将会拓展 n 列,并且按列优先添加项,否则将拓展 n 行,并且按行优先添加项
参数:
n – int
orient – OrientationsetHorizontalSpacingsetHorizontalSpacing(spacing)
功能:设置水平间距
参数:
spacing – intsetOriginCornersetOriginCorner(arg__1)
功能:设置栅格的初始化 corner 也就是位置 (0, 0) 为 arg__1
参数:
arg__1 – CornersetRowMinimumHeightsetRowMinimumHeight(row, minSize)
功能:设置 row 行的最小高度为 minSize 像素
参数:
row – int
minSize – intsetRowStretchsetRowStretch(row, stretch)
功能:设置 row 行的拉伸因子为 stretch。第一行为 0。拉伸因子与栅格中其他行有关。有着更高拉伸因子的行占据更多的可用空间。默认的拉伸因子为 0。如果拉伸因子为 0 且这个表格中根本没有其他行,那么这个行可能仍然会扩展
参数:
row – int
stretch – intsetVerticalSpacingsetVerticalSpacing(spacing)
功能:设置垂直间距
参数:
spacing – intverticalSpacingverticalSpacing()
功能:返回垂直间距
返回值:
tyep – int
2.1.4 Form Layout
- 类名:
QFormLayout - 功能:将其内部组件在网格中排列
2.2 Spacers
2.2.1 Horizontal Spacer
- 类名:
Spacer - 功能:将其内部组件在网格中排列
2.2.2 Vertical Spacer
- 类名:
Spacer - 功能:将其内部组件在网格中排列
2.3 Buttons
2.3.1 Push Button
- 类名:
QPushButton - 功能:将其内部组件在网格中排列
2.3.2 Tool Button
- 类名:
QToolButton - 功能:将其内部组件在网格中排列
2.3.3 Radio Button
- 类名:
QRadioButton - 功能:将其内部组件在网格中排列
2.3.4 Check Box
- 类名:
QCheckBox - 功能:将其内部组件在网格中排列
2.3.5 Command Link Button
- 类名:
QCommandLinkButton - 功能:将其内部组件在网格中排列
2.3.6 Dialog Button Box
- 类名:
QDialogButtonBox - 功能:将其内部组件在网格中排列
2.4 Item Views (Model-Based)
2.4.1 List View
- 类名:
QListView - 功能:将其内部组件在网格中排列
2.4.2 Tree View
- 类名:
QTreeView - 功能:将其内部组件在网格中排列
2.4.3 Table View
- 类名:
QTableView - 功能:将其内部组件在网格中排列
2.4.4 Column View
- 类名:
QColumnView - 功能:将其内部组件在网格中排列
2.4.5 Undo View
- 类名:
QUndoView - 功能:将其内部组件在网格中排列
2.5 Item Widgets (Item-Based)
2.5.1 List Widget
- 类名:
QListWidget - 功能:将其内部组件在网格中排列
2.5.2 Tree Widget
- 类名:
QTreeWidget - 功能:将其内部组件在网格中排列
2.5.3 Table Widget
- 类名:
QTableWidget - 功能:将其内部组件在网格中排列
2.6 Containers
2.6.1 Group Box
- 类名:
QGroupBox - 功能:将其内部组件在网格中排列
2.6.2 Scroll Area
- 类名:
QScrollArea - 功能:将其内部组件在网格中排列
2.6.3 Tool Box
- 类名:
QToolBox - 功能:将其内部组件在网格中排列
2.6.4 Tab Widget
- 类名:
QTabWidget - 功能:将其内部组件在网格中排列
2.6.5 Stacked Widget
- 类名:
QStackedWidget - 功能:将其内部组件在网格中排列
2.6.6 Frame
- 类名:
QFrame - 功能:将其内部组件在网格中排列
2.6.7 Widget
- 类名:
QWidget - 功能:将其内部组件在网格中排列
2.6.8 MDI Area
- 类名:
QMdiArea - 功能:将其内部组件在网格中排列
2.6.9 Dock Widget
- 类名:
QDockWidget - 功能:将其内部组件在网格中排列
2.6.10 QAxWidget
- 类名:
QAxWidget - 功能:将其内部组件在网格中排列
2.7 Input Widgets
2.7.1 Combo Box
- 类名:
QComboBox - 功能:将其内部组件在网格中排列
2.7.2 Font Combo Box
- 类名:
QFontComboBox - 功能:将其内部组件在网格中排列
2.7.3 Line Edit
- 类名:
QLineEdit - 功能:将其内部组件在网格中排列
2.7.4 Text Edit
- 类名:
QTextEdit - 功能:将其内部组件在网格中排列
2.7.5 Plain Text Edit
- 类名:
QPlainTextEdit - 功能:将其内部组件在网格中排列
2.7.6 Spin Box
- 类名:
QSpinBox - 功能:将其内部组件在网格中排列
2.7.7 Double Spin Box
- 类名:
QDoubleSpinBox - 功能:将其内部组件在网格中排列
2.7.8 Time Edit
- 类名:
QTimeEdit - 功能:将其内部组件在网格中排列
2.7.9 Date Edit
- 类名:
QGridLayout - 功能:将其内部组件在网格中排列
2.7.10 Date/Time Edit
- 类名:
QDateEdit - 功能:将其内部组件在网格中排列
2.7.11 Dial
- 类名:
QDial - 功能:将其内部组件在网格中排列
2.7.12 Horizontal Scroll Bar
- 类名:
QScrollBar - 功能:将其内部组件在网格中排列
2.7.13 Vertical Scroll Bar
- 类名:
QScrollBar - 功能:将其内部组件在网格中排列
2.7.14 Horizontal Slider
- 类名:
QSlider - 功能:将其内部组件在网格中排列
2.7.15 Vertical Slider
- 类名:
QSlider - 功能:将其内部组件在网格中排列
2.7.16 Key Sequence Edit
- 类名:
QKeySequenceEdit - 功能:将其内部组件在网格中排列
2.8 Display Widgets
2.8.1 Label
- 类名:
QLabel - 功能:将其内部组件在网格中排列
2.8.2 Text Browser
- 类名:
QTextBrowser - 功能:将其内部组件在网格中排列
2.8.3 Graphics View
- 类名:
QGraphicsView - 功能:将其内部组件在网格中排列
2.8.4 Calendar Widget
- 类名:
QCalendarWidget - 功能:将其内部组件在网格中排列
2.8.5 LCD Number
- 类名:
QLCDNumber - 功能:将其内部组件在网格中排列
2.8.6 Progress Bar
- 类名:
QProgressBar - 功能:将其内部组件在网格中排列
2.8.7 Horizontal Line
- 类名:
Line - 功能:将其内部组件在网格中排列
2.8.8 Vertical Line
- 类名:
Line - 功能:将其内部组件在网格中排列
2.8.9 OpenGL Widget
- 类名:
QOpenGLWidget - 功能:将其内部组件在网格中排列
参考文献: