PyQt5 - 2

发布时间 2023-04-05 09:17:29作者: 叁只小羊

1. 什么是控件

  • 一个程序界面上的独立元素,一块矩形区域
  • 具备不同的功能,比如:用户点击,接收用户输入,展示内容,存放其它控件等

2. 常用控件

2.1 按钮

  • QPushButton ,普通按钮
  • QCommandLinkButton , 超链接按钮
  • QRadioButton, 单选按钮
  • QCheckBox, 多选按钮

2.2 输入控件

2.2.1 纯键盘输入
  • QLineEdit,单行输入
  • QTextEdit,多行输入(普通文本,超链接,图片)
  • QPlainTextEdit, 普通文本
  • QKeySequenceEdit, 采集快捷键
2.2.2 步长调节(QAbstractSpinBox)(键盘+鼠标)

下面的按件可以手动输入或用鼠标增量调节

  • QDateTimeEdit,采集日期和时间的
    • QDateEdit , 单独的日期
    • QTimeEdit, 单独的时间
  • QSpinBox,输入整数
  • QDoubleSpinBox, 输入小数
2.2.3 组合框(下拉选择输入)
  • QComboBox, 下拉列表选择输入
    • QFontComboBox , 字体列表
2.2.4 滑块(QAbstractSlider)

用鼠标拖动

  • QDial, 圆钮旋转
  • QSlider, 滑块
  • QScrollBar,滚动条
2.2.5 橡皮筯选中
  • QRubberBand, 就是一个框选
2.2.6 对话框(QDialog)
  • QColorDialog, 颜色对话框
  • QFileDialog, 文件对话框
  • QFontDialog, 字体对话框
  • QInputDialog, 输入对话框
2.2.7 日期
  • QCalendarWidget , 日期选择

2.3 展示控件

  • QLabel ,可以展示普通文本,数字,富文本(字体,字号,颜色,超链接等),图片,GIF动画
  • QLCDNumber, 类似LCD的数字显示屏
  • QProgressBar,进度条
  • 对话框(QDialog)
    • QMessageBox,弹出一个小窗口(警告,错误等)
    • QErrorMessage,错误对话框(比如程序异常弹出的窗口,显示一些堆栈信息)
    • QProgressDialog,进度对话框

2.4 窗口控件

  • QToolBox,类似老式QQ列表
  • QDialogButtonBox,一个窗口,里面有ok, close, cancel / yes, no, Abort
  • QGroupBox, 分组,一个矩形框左上角有一个标签,里面可以放其它控件。
  • QMdiSubWindow , 子窗口
    • QMdiArea
    • QMdiSubWindow

2.5 结构控件

  • QMainWindow, 主窗口,可以放菜单栏,工具栏,状态栏等
    • 相当控件
    • QMenuBar 菜单栏
      • QMenu, 菜单
    • QToolBar 工具栏
      • QToolButton 工具按钮
    • QStatusBar 状态栏
  • QTabwidget, 标签按钮,就是有好多选项卡,可以选择的
    • QTabBar 标签(选项卡)
  • QStackedWidget,包含多个窗口,可以轮循各个窗口(类似栈)
  • QSplitter, 分割窗口
  • QDockWidget, 可以停放到上下左右位置,也可以浮动。

2.6 滚动控件(QAbstractScrollArea)

  • QTextBrowser, 文本浏览
  • QScrollArea, 滚动区域 ,比如图片太大,出现滚动条
  • QAbstractItemView
    • QColumnView, 多列
    • QHeaderView, 表头
    • QListView (列表)
      • QListWidget 列表
      • QUndoView 撤销与重做
    • QTableView, 表格
      • QTableWidget
    • QTreeView, 树结构
      • QTreeWidget
  • QMdiarea 子控件
  • QGraphicsView 用于画图

2.7 辅助控件

  • QFocusFrame 焦点控件
  • QSizeGrip 调整大小的一个控件
  • QDesktopWidget, 桌面控件,访问桌面的一些信息

2.8 其它控件

2.8.1 向导/打印
  • QWizard 向导(比如:安装软件)
    • QWizardPage 单独的一页
  • QAbstractPrintDialog 打印
    • QPrintDialog
  • QPrintPreviewDialog 打印预览
    • QPrintPreviewWidget
  • QPageSetupDialog 页面设置
2.8.2 欢迎界面
  • QSplashScreen 软件打开之前的界面
2.8.3 功能性控件
  • QVideoWidget 放视频
    • QCameraViewFinder 相机
  • QWebEngineView 浏览器

3. 类继承

不同的控件都有相同点(共性),可以抽取出来放到父类里。比如:名字,矩形区域,位置,大小,设置样式等。

对于不同点由不同的子类单独实现,比如:展示,输入,交互,容器,框架等

继承关系:QObject -> QWidget -> (各类控件) ,每类控件里有具体控件。

可以用函数打印一下继承关系:

def trace_inherit(obj, level=0):
    for sub in obj.__subclasses__():
        class_name = re.findall(r'\b\w+\b', str(sub))[-1]
        print(f"{'    ' * level}-> {class_name}")
        if len(sub.__subclasses__()) > 0:
            trace_inherit(sub, level=level + 1)

比如打印可视化控件基类QWidget获取的继承结构如下:

-> QAbstractButton
    -> QCheckBox
    -> QPushButton
        -> QCommandLinkButton
    -> QRadioButton
    -> QToolButton
-> QFrame
    -> QAbstractScrollArea
        -> QAbstractItemView
            -> QColumnView
            -> QHeaderView
            -> QListView
                -> QListWidget
                -> QUndoView
                -> QHelpIndexWidget
            -> QTableView
                -> QTableWidget
            -> QTreeView
                -> QTreeWidget
                -> QHelpContentWidget
        -> QGraphicsView
        -> QMdiArea
        -> QPlainTextEdit
        -> QScrollArea
        -> QTextEdit
            -> QTextBrowser
    -> QLCDNumber
    -> QLabel
    -> QSplitter
    -> QStackedWidget
    -> QToolBox
-> QAbstractSlider
    -> QDial
    -> QScrollBar
    -> QSlider
-> QAbstractSpinBox
    -> QDateTimeEdit
        -> QDateEdit
        -> QTimeEdit
    -> QDoubleSpinBox
    -> QSpinBox
-> QCalendarWidget
-> QDialog
    -> QColorDialog
    -> QErrorMessage
    -> QFileDialog
    -> QFontDialog
    -> QInputDialog
    -> QMessageBox
    -> QProgressDialog
    -> QWizard
    -> QAbstractPrintDialog
        -> QPrintDialog
    -> QPageSetupDialog
    -> QPrintPreviewDialog
-> QComboBox
    -> QFontComboBox
-> QDesktopWidget
-> QDialogButtonBox
-> QDockWidget
-> QFocusFrame
-> QGroupBox
-> QKeySequenceEdit
-> QLineEdit
-> QMainWindow
-> QMdiSubWindow
-> QMenu
-> QMenuBar
-> QOpenGLWidget
-> QProgressBar
-> QRubberBand
-> QSizeGrip
-> QSplashScreen
-> QSplitterHandle
-> QStatusBar
-> QTabBar
-> QTabWidget
-> QToolBar
-> QWizardPage
-> QSvgWidget
-> QQuickWidget
-> QPrintPreviewWidget
-> QGLWidget
-> QVideoWidget
    -> QCameraViewfinder
-> QHelpFilterSettingsWidget
-> QHelpSearchQueryWidget
-> QHelpSearchResultWidget
-> QDesignerActionEditorInterface
-> QDesignerFormWindowInterface
-> QDesignerObjectInspectorInterface
-> QDesignerPropertyEditorInterface
-> QDesignerWidgetBoxInterface
-> QAxWidget


查看某一个类的父类链:

def trace_super(obj):
    box = []
    for name in obj.__mro__:
        print(name)
        class_name = re.findall(r'\'(.*)\'', str(name))[-1]
        box.append(class_name)
    box.reverse()
    print(" <- ".join(box))

结果:

object <- sip.simplewrapper <- PyQt5.QtGui.QPaintDevice <- sip.wrapper <- PyQt5.QtCore.QObject <- PyQt5.QtWidgets.QWidget <- PyQt5.QtWidgets.QAbstractButton <- PyQt5.QtWidgets.QPushButton