PyQt Widgets

1 简介与安装

1.1 Python 图形界面开发的几种选择

  1. Tkinter: 基于 Tk,稳定,但控件少,适用于小型应用开发;
  2. wxPython: 基于 wxWidgets,文档与用户少,不适用于大型应用开发;
  3. PySide2/PySide6/PyQt5/PyQt6: 基于 Qt,控件丰富,文档与用户多,适用于大型应用开发。

1.2 在PyCharm 中配置 PyQt5

  1. 在 Python 环境中安装 PyQt5:
pip install pyqt5-tools
  1. 文件 > 设置 > 外部工具中配置与使用 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


  1. 类名:QVBoxLayout
  2. 功能:将其内部组件垂直排列
  3. 示例: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()
  4. 函数:
    1. QVBoxLayoutQVBoxLayout(parent)
      功能:在父组件 parent 中构造布局 QVBoxLayout
      参数:
      parent: QWidget

2.1.2 Horizontal Layout


  1. 类名:QHBoxLayout
  2. 功能:将其内部组件水平排列
  3. 示例: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()
  4. 函数:
    1. QHBoxLayoutQHBoxLayout(parent)
      功能:在父组件 parent 中构造布局 QHBoxLayout
      参数:
      parent: QWidget

2.1.3 Grid Layout


  1. 类名:QGridLayout
  2. 功能:将其内部组件在网格中排列
  3. 函数:
    1. QGridLayoutQGridLayout(parent)
      功能:在父组件 parent 中构造布局 QGridLayout
      参数:
      parent – QWidget
    2. addItemaddItem(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()
    3. 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 – Alignment
    4. addLayoutaddLayout(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 – Alignment
    5. addWidgetaddWidget(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 – Alignment
    6. addWidgetaddWidget(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 – Alignment
    7. cellRectcellRect(row, column)
      功能:返回栅格中行为 row,列为 col的单元格的几何形状,如果超出栅格范围则返回无效矩形
      参数:
        row – int
        column – int
      返回值:
      type – QRect警告:在当前版本的Qt中,此函数在调用 setGeometry() 之前不会返回有效的结果,即在 parentWidget() 可见之后
    8. columnCountcolumnCount()
      功能:返回栅格中列的数量
      返回值:
      type – int
    9. columnMinimumWidthcolumnMinimumWidth(column)
      功能:返回 column 列的列间距
      参数:
      column – int
      返回值:
      type – int
    10. columnStretchcolumnStretch(column)
      功能:返回 column 列的拉伸因子
      参数:
      column – int
      返回值:
      type – int
    11. getItemPositiongetItemPosition(idx)
      功能:返回 idx 处的 item 对应的位置信息。变量 row 和 column 通过布局中 item 的位置更新,变量 rowSpan 和 columnSpan 通过 item 垂直和水平跨度更新
      参数:
      idx – int
    12. horizontalSpacinghorizontalSpacing()
      功能:返回水平间距
      返回值:
      type – int
    13. itemAtPositionitemAtPosition(row, column)
      功能:返回 (row, column) 单元格的 layout item,如果单元格为空则返回 None
      参数:
      row – int
      column – int
      返回值:
      type – QLayoutItem
    14. originCorneroriginCorner()
      功能:返回用于栅格初始化的 corner,也就是位置 (0, 0)
      返回值:
      type – Corner
    15. rowCountrowCount()
      功能:返回栅格中行的数量
      返回值:
      type – int
    16. rowMinimumHeightrowMinimumHeight(row)
      功能:返回 row 行设定的最小宽度
      参数:
      row – int
      返回值:
      type – int
    17. rowStretchrowStretch(row)
      功能:返回 row 行的拉伸因子
      参数:
      row – int
      返回值:
      type – int
    18. setColumnMinimumWidthsetColumnMinimumWidth(column, minSize)
      功能:设置 column 列的最小宽度为 minSize 像素
      参数:
        column – int
        minSize – int
    19. setColumnStretchsetColumnStretch(column, stretch)
      功能:设置 column 列的拉伸因子为 stretch。第一列为 0。拉伸因子与栅格中其他列有关。有着更高拉伸因子的列占据更多的可用空间。默认的拉伸因子为 0。如果拉伸因子为 0 且这个表格中根本没有其他列,那么这个列可能仍然会扩展。一种可供选择的方法是使用 addItem() 与一个 QSpacer Item 来添加间距
      参数:
        column – int
        stretch – int
    20. setDefaultPositioningsetDefaultPositioning(n, orient)
      功能:使用 addItem() 设置位置模式。如果 orient 是水平的,这个布局将会拓展 n 列,并且按列优先添加项,否则将拓展 n 行,并且按行优先添加项
      参数:
        n – int
        orient – Orientation
    21. setHorizontalSpacingsetHorizontalSpacing(spacing)
      功能:设置水平间距
      参数:
        spacing – int
    22. setOriginCornersetOriginCorner(arg__1)
      功能:设置栅格的初始化 corner 也就是位置 (0, 0) 为 arg__1
      参数:
      arg__1 – Corner
    23. setRowMinimumHeightsetRowMinimumHeight(row, minSize)
      功能:设置 row 行的最小高度为 minSize 像素
      参数:
        row – int
        minSize – int
    24. setRowStretchsetRowStretch(row, stretch)
      功能:设置 row 行的拉伸因子为 stretch。第一行为 0。拉伸因子与栅格中其他行有关。有着更高拉伸因子的行占据更多的可用空间。默认的拉伸因子为 0。如果拉伸因子为 0 且这个表格中根本没有其他行,那么这个行可能仍然会扩展
      参数:
        row – int
        stretch – int
    25. setVerticalSpacingsetVerticalSpacing(spacing)
      功能:设置垂直间距
      参数:
        spacing – int
    26. verticalSpacingverticalSpacing()
      功能:返回垂直间距
      返回值:
      tyep – int

2.1.4 Form Layout


  1. 类名:QFormLayout
  2. 功能:将其内部组件在网格中排列

2.2 Spacers

2.2.1 Horizontal Spacer


  1. 类名:Spacer
  2. 功能:将其内部组件在网格中排列

2.2.2 Vertical Spacer


  1. 类名:Spacer
  2. 功能:将其内部组件在网格中排列

2.3 Buttons

2.3.1 Push Button


  1. 类名:QPushButton
  2. 功能:将其内部组件在网格中排列

2.3.2 Tool Button


  1. 类名:QToolButton
  2. 功能:将其内部组件在网格中排列

2.3.3 Radio Button


  1. 类名:QRadioButton
  2. 功能:将其内部组件在网格中排列

2.3.4 Check Box


  1. 类名:QCheckBox
  2. 功能:将其内部组件在网格中排列

2.3.5 Command Link Button


  1. 类名:QCommandLinkButton
  2. 功能:将其内部组件在网格中排列

2.3.6 Dialog Button Box


  1. 类名:QDialogButtonBox
  2. 功能:将其内部组件在网格中排列

2.4 Item Views (Model-Based)

2.4.1 List View


  1. 类名:QListView
  2. 功能:将其内部组件在网格中排列

2.4.2 Tree View


  1. 类名:QTreeView
  2. 功能:将其内部组件在网格中排列

2.4.3 Table View


  1. 类名:QTableView
  2. 功能:将其内部组件在网格中排列

2.4.4 Column View


  1. 类名:QColumnView
  2. 功能:将其内部组件在网格中排列

2.4.5 Undo View


  1. 类名:QUndoView
  2. 功能:将其内部组件在网格中排列

2.5 Item Widgets (Item-Based)

2.5.1 List Widget


  1. 类名:QListWidget
  2. 功能:将其内部组件在网格中排列

2.5.2 Tree Widget


  1. 类名:QTreeWidget
  2. 功能:将其内部组件在网格中排列

2.5.3 Table Widget


  1. 类名:QTableWidget
  2. 功能:将其内部组件在网格中排列

2.6 Containers

2.6.1 Group Box


  1. 类名:QGroupBox
  2. 功能:将其内部组件在网格中排列

2.6.2 Scroll Area


  1. 类名:QScrollArea
  2. 功能:将其内部组件在网格中排列

2.6.3 Tool Box


  1. 类名:QToolBox
  2. 功能:将其内部组件在网格中排列

2.6.4 Tab Widget


  1. 类名:QTabWidget
  2. 功能:将其内部组件在网格中排列

2.6.5 Stacked Widget


  1. 类名:QStackedWidget
  2. 功能:将其内部组件在网格中排列

2.6.6 Frame


  1. 类名:QFrame
  2. 功能:将其内部组件在网格中排列

2.6.7 Widget


  1. 类名:QWidget
  2. 功能:将其内部组件在网格中排列

2.6.8 MDI Area


  1. 类名:QMdiArea
  2. 功能:将其内部组件在网格中排列

2.6.9 Dock Widget


  1. 类名:QDockWidget
  2. 功能:将其内部组件在网格中排列

2.6.10 QAxWidget


  1. 类名:QAxWidget
  2. 功能:将其内部组件在网格中排列

2.7 Input Widgets

2.7.1 Combo Box


  1. 类名:QComboBox
  2. 功能:将其内部组件在网格中排列

2.7.2 Font Combo Box


  1. 类名:QFontComboBox
  2. 功能:将其内部组件在网格中排列

2.7.3 Line Edit


  1. 类名:QLineEdit
  2. 功能:将其内部组件在网格中排列

2.7.4 Text Edit


  1. 类名:QTextEdit
  2. 功能:将其内部组件在网格中排列

2.7.5 Plain Text Edit


  1. 类名:QPlainTextEdit
  2. 功能:将其内部组件在网格中排列

2.7.6 Spin Box


  1. 类名:QSpinBox
  2. 功能:将其内部组件在网格中排列

2.7.7 Double Spin Box


  1. 类名:QDoubleSpinBox
  2. 功能:将其内部组件在网格中排列

2.7.8 Time Edit


  1. 类名:QTimeEdit
  2. 功能:将其内部组件在网格中排列

2.7.9 Date Edit


  1. 类名:QGridLayout
  2. 功能:将其内部组件在网格中排列

2.7.10 Date/Time Edit


  1. 类名:QDateEdit
  2. 功能:将其内部组件在网格中排列

2.7.11 Dial


  1. 类名:QDial
  2. 功能:将其内部组件在网格中排列

2.7.12 Horizontal Scroll Bar


  1. 类名:QScrollBar
  2. 功能:将其内部组件在网格中排列

2.7.13 Vertical Scroll Bar


  1. 类名:QScrollBar
  2. 功能:将其内部组件在网格中排列

2.7.14 Horizontal Slider


  1. 类名:QSlider
  2. 功能:将其内部组件在网格中排列

2.7.15 Vertical Slider


  1. 类名:QSlider
  2. 功能:将其内部组件在网格中排列

2.7.16 Key Sequence Edit


  1. 类名:QKeySequenceEdit
  2. 功能:将其内部组件在网格中排列

2.8 Display Widgets

2.8.1 Label


  1. 类名:QLabel
  2. 功能:将其内部组件在网格中排列

2.8.2 Text Browser


  1. 类名:QTextBrowser
  2. 功能:将其内部组件在网格中排列

2.8.3 Graphics View


  1. 类名:QGraphicsView
  2. 功能:将其内部组件在网格中排列

2.8.4 Calendar Widget


  1. 类名:QCalendarWidget
  2. 功能:将其内部组件在网格中排列

2.8.5 LCD Number


  1. 类名:QLCDNumber
  2. 功能:将其内部组件在网格中排列

2.8.6 Progress Bar


  1. 类名:QProgressBar
  2. 功能:将其内部组件在网格中排列

2.8.7 Horizontal Line


  1. 类名:Line
  2. 功能:将其内部组件在网格中排列

2.8.8 Vertical Line


  1. 类名:Line
  2. 功能:将其内部组件在网格中排列

2.8.9 OpenGL Widget


  1. 类名:QOpenGLWidget
  2. 功能:将其内部组件在网格中排列

参考文献:

https://www.byhy.net/py/qt

PyQt5保姆级教程– 从入门到精通_pyqt5教程-CSDN博客

Qt Documentation | Home

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注