PyQt5/PySide2常用组件
学习文档
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.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 表示可执行文件的图标(这些暂时够用)