PyQt5/PySide2常用组件

发布时间 2023-03-22 21:17:20作者: huiyii

学习文档

https://mp.weixin.qq.com/s/QiAW-NVfbpZqZxp1L632RA
http://code.py40.com/pyqt5/16.html
信号和槽 https://blog.csdn.net/qq_40243295/article/details/105633221
https://blog.csdn.net/weixin_44593822/article/details/112199746
mac配置 https://blog.csdn.net/weixin_42567622/article/details/123899386

简介

Qt5应用于gui 编程,pyqt5是一套Python绑定Digia QT5应用的框架
  • QtCore: 包含了核心的非GUI功能。此模块用于处理时间、文件和目录、各种数据类型、流、URL、MIME类型、线程或进程。
  • QtGui 包含类窗口系统集成、事件处理、二维图形、基本成像、字体和文本。
  • Qtwidgets 模块包含创造经典桌面风格的用户界面提供了一套UI元素的类。
  • QtMultimedia 包含的类来处理多媒体内容和API来访问相机和收音机的功能。
  • Qtbluetooth 模块包含类的扫描设备和连接并与他们互动。描述模块包含了网络编程的类。这些类便于TCP和IP和UDP客户端和服务器的编码,使网络编程更容易和更便携。
  • Qtpositioning 包含类的利用各种可能的来源,确定位置,包括卫星、Wi-Fi、或一个文本文件。 Enginio模块实现了客户端库访问Qt云服务托管的应用程序运行时。
  • Qtwebsockets模块包含实现WebSocket协议类。
  • QtWebKit包含一个基于Webkit2图书馆Web浏览器实现类。
  • Qtwebkitwidgets包含的类的基础webkit1一用于qtwidgets应用Web浏览器的实现。
  • QtXml包含与XML文件的类。这个模块为SAX和DOM API提供了实现。
  • QtSvg模块提供了显示SVG文件内容的类。可伸缩矢量图形(SVG)是一种描述二维图形和图形应用的语言。
  • QtSql模块提供操作数据库的类。
  • QtTest包含的功能,使pyqt5应用程序的单元测试

基本功能

  • QApplication
app = (sys.argv)
每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令行输入参数。
  • QWidget
QWidget部件是pyqt5所有用户界面对象的基类。
  • app.exec_()
sys.exit(app.exec_())
app.exec_()方法有下划线。exec_()方法的作用是“进入程序的主循环直到exit()被调用”,最后一个窗口关闭后,程序才停止,停止后返回0
sys.exit()方法确保应用程序干净的退出,退出后杀掉进程,等于一个命令行命令

三个窗口基类

QmainWindow

QMainWindow 类经常被继承,可以包含菜单栏,工具栏,状态栏,标题栏等,是 GUI 程序的主窗口。如果我们需要创建主窗口程序,就使用该类。
  • addToolBar() 添加工具栏
  • setCentralWidget() 设置窗口中心的控件
  • centralWidget() 返回窗口中心的控件,未设置返回 NULL
  • menuBar() 返回主窗口的菜单栏
  • setStatusBar() 设置状态栏
  • statusBar() 获取状态栏对象

QDialog

QDialog 是对话框窗口的基类,对话框一般用来执行短期任务,或者与用户进行互动,它可以是模态的也可以是非模态的。QDialog 没有菜单栏,工具栏,状态栏等。如果我们需要的是对话框,就选择该类。 QDialog 类的子类主要有 QMessageBox、QFileDialog、QFontDialog、QInputDialog、QColorDialog、QErrorMessage、QProgressDialog、QTabDialog、QWizard 等

QWidget

该类作为 QMainWindow 的父类,并未细化到主窗口或者对话框,作为通用窗口类,如果不确定具体使用哪种窗口类,就可以使用该类。 QWidget 类是所有用户界面对象的基类,窗口部件是用户界面的一个基本单元,它从窗口系统接收鼠标、键盘和其他消息,并在屏幕上绘制自己。一个窗口部件可以被它的父窗口或其他窗口挡住一部分。 QWidget 类中的 frameGeometry( ) 方法提供的成员函数:x( )、y( ) 用于获取客户区左上角的坐标,width()、height( ) 用于获取客户区的宽度和高度。

pyqt5 常用组件

按钮类

  • QPushButton 普通按钮
  • QToolButton 工具按钮:通常在工具栏使用
  • QRadioButton 单选框
  • QCheckBox 复选框
  • QCommanLinkButton Vista 风格的命令链接按钮
  • QDialogButtonBox 对话框按钮组:确定、取消

显示组件

  • QLabel 标签
  • QTextBrowser 文本区域
  • QGraphicsView 图像显示
  • QCalendarWidget 日历组件
  • QProgressBar 进度条
  • QLCDNumber 液晶数字显示
  • QWebView Web 浏览器视图
  • QDeclarativeView 显示 Qt 声明的用户接口

输入组件

  • QComboBox 下拉选框
  • QFontComboBox 字体选择
  • QLineEdit 单行文本框
  • QTextEdit 多行文本框(富文本)
  • QPlainTextEdit 多行文本框(纯文本)
  • QSpinBox 整数范围调节器
  • QDoubleSpinBox 实型范围调节器
  • QDial 环形范围调节器
  • QSlider 滑动调节器
  • QTimeEdit 时间输入框
  • QDateEdit 日期输入框
  • QDateTimeEdit 时间日期输入框

容器类

  • QFrame 帧窗口
  • QWidget 界面部件,所有界面对象类的基类
  • QToolBox 工具栏容器
  • QTabWidget 多标签容器
  • QStackedWidget 层次容器,一次只有一个可见
  • QScollArea 滚动区域
  • QGroupBox 对象组容器
  • QMdiArea 多文档容器
  • QDockWidget 悬浮容器
  • QDail, QSpinBox 的使用

组件常用方法

文本类控件

  • Label 标签控件
    • lb.setAlignment 设置对齐方式
    • lb.setWordWrap(True) 设置文本换行显示
    • lb.setOpenExternlLinks(True) 设置允许访问超链接
    • 为标签设置图片:首先要导入 QPixmap,lb.setPixmap(QPixmap('图片路径'))
  • LineEdit 单行文本框
    • setPlaceholderText() 设置文本框浮现文字
    • setManLength() 设置允许文本框内输入字符的最大长度
    • setAlignment() 设置文本对齐方式
    • setReadOnly() 设置文本框只读
    • setEchoMode 设置文本框显示字符的模式
      • le.NoEcho 不显示任何输入的字符
      • le.password 显示与平台相关的密码掩码字符,而不是实际输入的字
      • le.PasswordEchoOnEdit 在编辑时显示字符,失去焦点后显示密码掩码字符
    • setValidator
      • QIntValidatoe :限制输入整数
      • QDoubleValidator: 限制输入小数
      • QEegExpValidator: 检查输入是否符合设置的正则表达式
    • clear() 清除文本框内容
  • TextEdit 多行文本框
    • setPlainText() 设置文本内容
    • toPlainText() 获取文本内容
    • setTextColor(QtGui.QColor) 设置文本颜色
    • setTextBackgroundColor() 设置文本的背景颜色
    • setWordWrapMode() 设置自动换行
  • SpinBox 整数数字选择控件
    • setValue() 设置控件的当前值
    • setMaximum() 设置最大值
    • setMinimum() 设置最小值
    • setRange() 设置取值范围
    • setSingleStep() 单机上下箭头的步长值
  • DoubleSpinBox 小数数字选择控件
  • LCDNumber 液晶数字显示控件

按钮类控件

  • setIcon() 设置按钮上的图标,可以将参数设置为 QtGui.QIcon('图标路径')
  • setIconSize() 参数可以设置为 QtCore.QSize(width,height)
  • setEnabled()
  • setShortcut()

选择列表类控件

  • comboBox 下拉组合框
    • addItem() 添加一个下拉列表框
    • addItems() 从列表中添加下拉选项
    • currentText() 获取选中项的文本
    • currentIndex() 获取选中项的索引
    • itemText(index) 获取索引为 index 的项的文本
    • setItemText(index,text) 设置索引为 index 的项的文本
    • count() 获取所有选项的数量
    • clear() 删除所有选项
    • 常用信号:actived 和 currentIndexChanged
      • actived 信号在选中一个下拉选项时发射
      • currentIndexChanged 信号在下拉选项的索引发生改变时发射
  • QListWidget 列表框
    • addItem() 向列表中添加项
    • addItems() 一次向列表中添加多项
    • insertItem() 在指定索引处插入项
    • setCurrentItem() 设置当前选择项
    • item.setToolTip() 设置提示内容
    • item.isSelected() 判断项是否选中
    • setWordWrap() 设置是否自动换行
    • setViewMode() 设置显示模式
    • item.text() 获取项的文本
    • clear() 删除所有列表项

容器类控件

  • GroupBox
    • setTitle() 设置分组标题
  • ToolBox
    • addItem() 添加选项卡
    • setCurrentIndex() 设置当前选中的选项卡索引
    • setItemIcon() 设置选项卡的图标
    • setItemText() 设置选项卡的标题文本
    • setItemEnabled() 设置选项卡是否可用
    • insertItem() 插入新选项卡
    • removeItem() 移除选项卡
    • itemText() 获取选项卡的文本
    • currentIndex() 获取当前选项卡的索引

日期时间类控件

  • CalendarWidget
    • setMinimumDate() 设置最小日期
    • setMaximumDate 设置最大日期
    • setFirstDayOfWeek 设置一周的第一天 Qt.Monday
    • setGridVisible 设置是否显示网格线
    • setSelectionMode 设置选择模式
      • QCalendarWidget.NoSelection:不能选中日期
      • QCalendarWidget.SingleSelection
    • setHorizontallHeaderFormat 设置水平头部格式
      • QCalendarWidget.NoHorizontalHeader 不显示水平头部
      • QCalendarWidget.SingleLetterDayNames:"周"
      • QCalendarWidget.ShortDayNames:简短天的名称,如:周一
      • QCalendarWidget.LongDayNames: 完整天的名称 如 “星期一”
    • setNavigationBarVisible 设置是否显示导航栏
    • setDateEditEnabled 设置是否可以编辑日期
    • setDateEditAcceptDelay() 设置编辑日期的最长间隔
    • selectedDate() 获取选择的日期,返回值而 QDate 类型
    • 常用的信号时 selectionChanged,该信号的选择的日期发生改变时发射
  • QDateTimeEdit
    • setTime 设置时间
    • setMaximumTime() 设置最大时间
    • setMinimumTime() 设置最小时间
    • setTimeSpec() 获取显示的时间标准
      • LocalTime 本地时间
      • UTC 世界标准时间
    • setDate() 设置日期
    • setMaximumDate() 设置最大日期
    • setMinimumDate() 设置最小日期
    • setDisplayFormat() 设置日期时间显示样式
      • 日期样式:yyyy/MM/dd
      • 时间样式:HH:mm:ss
    • date() 获取显示的日期,返回 QDate 类型
    • time() 获取显示的时间,返回值为 QTime 类型
    • dateTime() 获取显示的日期时间,返回值为 QDateTime 类型
  • 常用信号
    • timeChanged 时间发生改变时发射
    • dateChanged 日期发生改变时发射
    • dateTimeChanged 日期或者时间发生改变时发射

GUI 常用的两种布局方式

绝对位置布局

组件不放在布局管理器种,而通过函数 setGeometry(x, y, width, height) 来设定组件相对其父窗口的位置。其中 x, y 是组件左上角的坐标,width, height 是组件的宽和高。在绝对位置布局中,resize() 函数可以调整组件尺寸,setGeometry( ) 函数可以调整组件位置和尺寸,甚至重载 sizeHint( ) 函数也可以设定组件尺寸。采用绝对位置布局方式,组件的位置和尺寸固定,并不会随着父窗口位置和尺寸的改变而发生改变。

布局类简介

常用的布局类如下:
  • 水平布局管理器(QHBoxLayout)可以把添加的控件以水平的顺序依次排开;
  • 垂直布局管理器(QVBoxLayout)可以把添加的控件以垂直的顺序依次排开;
  • 网格布局管理器(QGridLayout)可以以网格的形式把添加的控件以一定矩阵排列;
  • 窗体布局管理器(QFormLayout)可以以两列的形式排列所添加的控件。
使用布局管理器的优点是,组件的布局根据用户设置和系统自行布局确定位置和尺寸,布局方式灵活,且组件的尺寸可以根据情况发生恰当的改变,布局美观。

布局类进阶:

1. 水平(垂直)布局管理器 [QHBoxLayout(QVBoxLayout)]
  • QHBoxLayout:按照从左到右的顺序添加控件。
  • QVBoxLayout:按照从上到下的顺序添加控件。
QHBoxLayout 类中的常用方法如下:
  • addLayout(self, QLayout, stretch=0):在窗口的右边添加布局,使用 stretch 进行伸缩,默认伸缩量为 0;
  • addWidget(self, QWidget, stretch, Qt.Alignment alignment):在布局中添加控件,其中 stretch 只适用于 QBoxLayout,控件和窗口会随着伸缩量的变大而增大;alignment 用于指定对齐方式;
  • addSpacing(self, int):设置各控件的上下间距。通过该方法可以增加额外的空间。
2. 网格布局管理器(QGridLayout)
QGridLayout 将窗口分隔成行和列的网格来进行排列。通常可以使用 addWidget( ) 函数将被管理的控件(Widget)添加到窗口中,或者使用 addLayout( ) 函数将布局(Layout)添加到窗口中。也可以使用 addWidget( ) 函数对所添加的控件设置行数和列数的跨越,最终实现网格占据多个窗格。 QGridLayout 类中的常用方法如下:
1) addWidget(QWidget widget, int row, int column, int alignment=0):给网格布局添加控件,设置指定的行和列。起始位置的默认值为 (0,0)。其中,widget 表示所添加的控件;row 表示控件的行数,默认从 0 开始;column 表示控件的列数,默认从 0 开始;alignment 表示对齐方式。 2) addWidget(QWidget widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt.Alignment alignment=0):当所添加的控件跨越很多行或列时,使用这个函数。其中,widget 表示所添加的控件,fromRow 表示控件的起始行数,fromColumn 表示控件的起始列数,rowSpan 表示控件跨越的行数,columnSpan 表示控件跨越的列数,alignment 表示对齐方式。该方法用于设置控件在水平和垂直方向的间隔。
 

setStyleSheet 用法

setStyleSheet 是遵循 CSS 的写法,它可以定义某个窗口基类全局的 CSS,也可以针对某个组件去定义。具体可以参考 css 的手册: https://css.doyoe.com/

窗口基类全局定义

给 QDialog 下所有按钮、文本输入、label 等组件,定义字体样式、边框样式等

QFrame 简介

QFrame 是一个继承制 QWidget 的控制框架外形的类,主要是用来控制一些边框样式,、例如凸起、凹下、阴影、线宽等,它既可以直接使用,也可以作为需要边框控制的控件的基类。 QFrame 常用方法:
  • setFrameShape():设置 QFrame 类窗口的边框,其参数见 QFrame.Shape 枚举值
  • setFrameShade():设置 QFrame 类窗口的阴影,其参数见 QFrame.Shade 枚举值
  • setFrameStyle():同时设置边框和阴影,参数为 QFrame.Shape|QFrame.Shade 组合
  • setLineWidth():设置外线宽度;
  • setMidLineWidth():设置中线宽度;
  • frameShape():获取边框类型;
  • frameShade():获取边框阴影;
  • lineWidth():获取外线宽度;
  • midLineWidth():获取中线宽度;
  • frameWidth():总宽度。
QFrame.Shape 枚举变量及含义:
  • QFrame.NoFrame:0,无边框;
  • QFrame.Box:1,矩形框;
  • QFrame.Panel:2,凸起或者凹下的面板;
  • QFrame.WinPanel:3,Windows 2000 风格的面板,可以是凸起或下沉。边框的宽度是 2 像素。此属性是为了与旧版本的 Qt 兼容而存在的;
  • QFrame.HLine:4,水平线 (用作分隔线);
  • QFrame.VLine:5, 垂直线 (用着分隔线);
  • QFrame.StyledPanel:6,根据当前 GUI 类型,画一个矩形面板,可以凸起或者凹
QFrame.Shade 枚举变量及含义:
  • QFrame.Plain:0x10, 无阴影;
  • QFrame.Raised: 0x20, 面板凸起;
  • QFrame.Sunken: 0x30, 面板下沉。

exe 文件生成

pyinstaller 是一个非常简单的打包 python 的 py 文件的库。
pyinstaller 安装:pip install pyinstaller
Demo: 进入到 main 文件执行路径,打开 cmd 命令行输入 pyinstaller -F -w -i ./picture/lhm.ico ./main.py
参数详解:
  • -F 表示生成单个可执行文件,执行后 dist 目录中出现了 python_test.exe 文件,没有任何依赖库,执行它即可。
  • -w 表示去掉控制台窗口,这在 GUI 界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
  • -i 表示可执行文件的图标(这些暂时够用)