PyQt5中包含了很多用于简化窗口设计的可视化控件,除了常用控件外,还有一些关于进度、展示数据等的高级控件。
本章重点讲解PyQt5程序开发中用到的一些高级控件,主要包括ProgressBar进度条控件、QSlider滑块控件、树控件、分割线控件、弹簧控件、Dial旋钮控件和QScrollBar滚动条控件,另外,还对如何在程序中自定义等待提示框进行了介绍。学习本章内容时,重点需要掌握ProgressBar进度条控件、QSlider滑块控件和TreeWidget树控件的使用方法。
进度条类控件主要显示任务的执行进度,PyQt5提供了进度条控件和滑块控件这两种类型的进度条控件。其中,进度条控件是我们通常所看到的进度条,用ProgressBar控件表示,而滑块控件是以刻度线的形式出现。
ProgressBar控件对应PyQt5中的QProgressBar类,它其实就是QProgressBar类的一个对象。
方法
说明
setMinimun()
设置进度条的最小值,默认值为0。
setMaximun()
设置进度条的最大值,默认值为99。
setRange()
设置进度条的取值范围,相当于setMinimum()和settMaximum()的结合。
setValue()
设置进度条的当前值。
setFormat()
setLayoutDirection()
setAlignment()
设置对齐方式,有水平和垂直两种,分别如下:
setOrientation()
setInvertedAppearance()
设置进度条是否以反方向显示进度。
setTextDirection()
setProperty()
minimum()
获取进度条的最小值。
maximum()
获取进度条的最大值。
value()
获取进度条的当前值。
ProgressBar控件最常用的信号是valueChanged,在进度条的值发生改变时发射。
通过对ProgressBar控件的显示方向、对齐方式、布局方向等进行设置,该控件可以支持4种水平进度条显示方式和2种垂直进度条显示方式,用户可以根据自身需要选择适合自己的显示方式。
如果将最小值和最大值都设置为0,那么进度条会显示为一个不断循环滚动的繁忙进度,而不是步骤的百分比。
打开Qt Designer设计器,创建一个窗口,并向窗口中添加4个ProgressBar控件和一个PushButton控件,然后将该窗口转换为.py文件,在.py文件中对进度条和PushButton按钮的clicked信号进行绑定。 完整代码如下:
运行效果如下:
上面代码用到了QBasicTimer类,该类是QtCore模块中包含的一个类,主要用来为对象提供定时器事件。QBasicTimer定时器是一个重复的定时器,除非调用stop()方法,否则它将发送后续的定时器事件。启动定时器使用start()方法,该方法有两个参数,分别为超时时间(毫秒)和接收事件的对象,而停止定时器使用stop()方法即可。
在使用PyQt5创建桌面窗口应用程序时,有时会遇到等待长任务执行的情况,PyQt5提供的ProgressBar控件(即QProgressBar对象)虽然也可以通过循环滚动的方式等待任务执行完成,但与我们通常见到的下图所示的等待提示框相比,不是特别美观。
使用PyQt5实现等待提示框时,可以通过加载gif图片的方式模拟等待提示框,首先在创建主窗口时,在窗口的中间位置添加一个可以加载gif图片的Label控件,然后再添加两个PushButton按钮,分别用于控制等待提示框的启动与停止。 完整代码如下:
运行结果如图所示:
使用的动态图如下:
上面代码中使用QLabel类的setMovie()方法为其设置要显示的gif动画图片,该方法要求有一个QMovie对象作为参数,QMovie类是QtGui模块中提供的一个用来显示简单且没有声音动画的类。
PyQt5提供了两个滑块控件,分别是水平滑块HorizontalSlider和垂直滑块VerticalSlider,但这两个滑块控件对应的类都是QSlider类,该类提供了一个setOrientation()方法,通过设置该方法的参数,可以将滑块显示为水平或者垂直。
方法
说明
setMinumum()
设置滑块最小值。
setMaximum()>
设置滑块最大值。
setOrientation()
setPageStep()
设置步长值,通过鼠标**点击滑块时**使用。
setSingleStep()
设置步长值,通过鼠标**拖动滑块时**使用。
setValue()
设置滑块的值。
setTickInterval()
设置滑块的刻度间隔。
信号
说明
valueChanged
当滑块的值发生改变时发射信号。
sliderPressed
当用户按下滑块时发射该信号。
sliderMoved
当用户拖动滑块时发射该信号。
sliderReleased
当用户释放滑块时发射该信号。
注意,QSlider滑块只能控制整数范围,它不适合于需要准确的大范围取值的场景。
在Qt Designer设计器中创建一个窗口,在窗口中分别添加一个HorizontalSlider水平滑块和一个VerticalSlider垂直滑块,然后添加一个HorizontalLayout水平布局管理器,在该布局管理器中添加一个Label标签,用来显示文字。设计完成后,保存为.ui文件,并使用PyUIC工具将其转换为.py文件。在.py文件中通过绑定水平滑块的valueChanged信号,实现拖动水平滑块时,实时改变垂直滑块的刻度值,同时改变Label标签中的字体大小。 完整代码如下:
说明:上面代码用到了水平布局管理器HorizontalLayout,它实质上是一个QHBoxLayout类的对象,它在这里的主要作用是放置Label控件,这样,Label控件就只可以在水平布局管理器中显示,避免了字体设置过大时,超出窗口范围的问题。
运行程序,当鼠标拖动水平滑块的刻度时,垂直滑块的刻度值会随之变化,另外。Label标签中的文字也会发生改变:
树控件可以为用户显示节点层次结构,而每个节点又可以包含子节点,包含子节点的节点叫父节点,在设计树形结构(如导航菜单等)时,很方便。PyQt5提供了两个树控件,分别是TreeView和TreeWidget。
TreeView控件对应PyQt5的QTreeView类,它是树控件的基类,使用时,必须为其提供一个模型来与之配合。
方法
说明
autoExpandDelay()
collapse()
收缩指定级的节点。
collapseAll()
收缩所有节点。
expand()
展开指定级的节点。
expandAll()
展开所有节点。
header()
树的头信息,常用的有一个setVisible()方法,用来设置是否显示头。
isHeaderHidder()
判断是都隐藏头部。
setAutoExpandDelay()
setAlternatingRowColors()
设置每间隔一行颜色是否一样。
setExpanded()
根据索引设置是否展开节点。
setHeaderHidden()
设置是否隐藏头部。
setItemsExpandable()
设置项是否展开。
setMode()
设置要显示的数据模型。
setSortingEnabled()
设置单击头部是否可以排序。
setVerticalScrollBarPolicy()
设置是否显示垂直滚动条。
setHorizontalScrollBarPolicy()
设置是否显示水平滚动条。
setEditTriggers()
设置默认的编辑触发器。
setExpandsOnDoubleClick()
设置是否支持双击展开树节点。
setWordWrap()
设置自动换行。
selectionModel()
获取选中的模型。
sortByColumn()
根据列排序。
setSelectionMode()
setSelectionBehavior()
使用TreeView控件分层显示PyQt5内置模型的数据和自定义的数据。
模型
说明
QStringListModel
存储简单的字符串列表。
QStandardItemModel
可以用于树结构的存储,提供了层次数据。
QFileSystemModel
存储本地系统的文件和目录信息(针对当前项目)
QDirModel
存储文件系统。
QsqlQueryModel
存储SQL的查询结构集。
QsqlTableModel
存储SQL中的表格数据。
QsqlRelationalTableModel
存储有外键关系的SQL表格数据。
QSortFilterProxyModel
对模型中的数据进行排序或者过滤。
使用系统内置的QDirModel作为数据模型,在TreeView中显示系统的文件目录。 完整代码如下:
运行效果如图所示:
PyQt5提供了一个QStandardItemModel模型,该模型可以存储任意层次结构的数据。下面介绍如何使用QStandardItemModel模型存储数据结构,并显示在TreeView控件中。
创建一个PyQt窗口,并在其中添加一个TreeView控件,然后在.py文件中使用QStandardItemModel模型存储某年级下的各个班级的学生成绩信息,最后将设置完的QStandardItemModel模型作为TreeView控件的数据模型进行显示。 完整代码如下:
运行程序,可以展开年级节点:
TreeWidget控件对应于PyQt5中的QTreeWidget类,它提供了一个使用预定义树模型的树视图,它的每一个树节点都是一个QTreeWidgetItem。
方法
说明
addTopLevelItem()
添加顶级节点
insertTopLevelItems()
在树的顶层索引中插入节点
invisibleRootItem()
获取树控件中不可见的根选项
setColumnCount()
设置要显示的列数
setColumnWidth()
设置列的宽度
selectedItems()
获取选中的树节点
QTreeWidgetItem中的树节点项。
方法
说明
addChild()
添加子节点。
setText()
设置节点的文本。
setCheckState()
setIcon()
为节点设置图标。
text()
获取节点的文本。
TreeWidget控件的常见用法如下:
使用TreeWidget控件显示树结构主要用到QTreeWidgetItem类,该类表示标准树节点,通过其setText()方法可以设置树节点的文本。
创建一个PyQt5窗口,并在其中添加一个TreeWidget控件,然后保存为.ui文件,并使用PyUIC工具将其转换为.py文件,在.py文件中,通过创建QTreeWidgetItem对象为树控件设置树节点。 完整代码如下:
运行结果如图所示:
为节点设置图标主要用到了QtWidgetItem类的setIcon()方法。
关键代码如下:
完整代码如下:
运行结果:
关键代码:
全部代码如下:
运行效果:
隔行变色显示树节点需要用到TreeWidget控件的setAlternatingRowColors()方法,设置为True表示隔行换色,设置为False表示统一颜色。
关键代码如下:
完整代码如下:
运行效果如下,树控件的奇数行为浅灰色背景,而偶数行为白色背景:
获取选中节点的文本时,首先需要使用currentItem()方法获取当前的选中项,然后通过text()方法获取指定列的文本。
关键代码如下:
完整代码如下:
运行效果如下:
分割类控件主要对窗口中的区域进行功能划分,使窗口看起来更加合理、美观,PyQt5提供了分割线和弹簧两种类型的分割控件。
PyQt5提供了两个分割线控件,分别是水平分割线HorizontalLine和垂直分割线VerticalLine,但这两个分割线控件对应的类都是QFrame类,该类提供了一个setFrameShape()方法,通过设置该方法的参数,可以将分割线显示为水平或者垂直。
方法
说明
setFrameShape()
setFrameShadow()
setLineWidth()
设置分割线的宽度。
setMidLineWidth()
设置分割线的中间线宽度。
在Qt Designer设计器中创建一个窗口,在窗口中添加8个Label控件,分别用来作为区域和分割线的标识;添加3个HorizontalLine水平分割线和4个VerticalLine垂直分割线,其中,用3个HorizontalLine水平分割线和3个VerticalLine垂直分割线显示分割线的各种样式,而剩余的一个VerticalLine垂直分割线用来将窗口分成两个区域。 关键代码如下:
完整代码如下:
运行结果如下:
PyQt5提供了两个弹簧控件,分别是HorizontalSpacer和VerticalSpacer,但这两个控件对应的类都是QSpacerItem类,水平和垂直主要通过宽度和高度(水平弹簧的默认宽度和高度分别是40、20,而垂直弹簧的默认宽度和高度分别是20、40)进行区分。
QSpacerItem弹簧主要用在布局管理器中,用来使布局管理器中的控件布局更加合理。
在Qt Designer设计器中创建一个窗口,在窗口中添加一个VerticalLayout垂直布局管理器,并向该布局管理器中任意添加控件,默认都是从下往上排列。
在垂直布局管理器中添加控件的设计效果:
在垂直布局管理器中添加控件的运行效果:
如果想要在垂直布局管理器中改变某个控件的位置,默认是无法改变的,那么怎么办呢?PyQt5提供了弹簧控件来方便开发人员能够根据自身需求更合理地摆放控件的位置。例如,通过应用弹簧对控件位置进行改动。使用弹簧更改控件位置的设计效果:
使用弹簧更改控件位置的运行效果:
弹簧控件只在设计窗口时显示,在实际运行时不显示。
除了前面的一些常用控件之外,PyQt5还提供了一些比较有特色的控件。
Dial控件,又称为旋钮控件,它本质上类似于一个滑块控件,只是显示的样式不同。
Dial控件对应PyQt5中的QDial类。
方法
说明
setFixedSize()
设置旋钮的大小
setRange()
设置表盘的数值范围
setMinimum()
设置最小值
setMaximum()
设置最大值
setNotchesVisible()
设置是否显示刻度
使用Dial控件实现与前面QSlider滑块设置标签中文字大小类似的功能。 完整代码如下:
运行程序,默认效果如图所示:当用鼠标拖改:
变旋钮的刻度值时,Label标签中的文字大小也会发生改变:
PyQt5提供了两个滚动条控件,分别是水平滚动条HorizontalScrollBar和垂直滚动条VerticalScrollBar,但这两个滚动条控件对应的类都是QScrollBar类,这两个控件通过水平的或垂直的滚动条,可以扩大当前窗口的有效装载面积,从而装载更多的控件。
方法
说明
setMinimum()
设置滚动条最小值。
setMaximum()
设置滚动条最大值。
setOritentation()
setValue()
设置滚动条的值。
value()
获取滚动条的当前值。
信号
说明
信号
说明
valueChanged
当滚动条的值发生改变时发射该信号
sliderMoved
当用户拖动滚动条的滑块时发射该信号
将水平滚动条和垂直滚动条拖放到PyQt5窗口中的效果如图所示:
滚动条控件通常与其他控件配合使用,如ScrollArea、TableWidget表格等,另外,也可以使用滚动条控件实现与滑块控件同样的功能,实际上,滚动条控件也是一种特殊的滑块控件。
摘要基于YOLO V8的高精度烟头检测识别系统可用于日常生活中检测与烟头目标,利用YOLO V8算法可实现图片、视频、摄像头等方式的烟头目标检测识别,另外支持结果可视化与检测结果的导出。本系统采用YOLO V8目标检测模型训练数据集,使用Pyqt5库来搭建页面展示系统,同时支持ONNX、PT等模型作为权重模型的输入。本系统支持的功能包括烟头训练模型的导入、初始化;置信分与IOU阈值的调节、图
1、使用控件提升的原因在使用qt设计师软件时,当遇到软件没有提供自己想使用的控件时,可以使用控件提升的方法比如在使用QtChart时,由于qt设计师没有提供这个控件,所以需要使用控件提升。2、使用QtChart进行简单的画图使用步骤见下图使用qt设计师设计ui界面这里选择了一个Widget作为窗口,由于QChartView继承自QGraphicsView,所以这里在窗口正中放置了一个QGraphi
控件1控件就像是应用这座房子的一块块砖。PyQt5有很多的控件,比如按钮,单选框,滑动条,复选框等等。在本章,我们将介绍一些很有用的控件:QCheckBox,ToggleButton,QSlider,QProgressBar和QCalendarWidget。QCheckBoxQCheckBox组件有俩状态:开和关。通常跟标签一起使用,用在激活和关闭一些选项的场景。import sysfrom P
软硬件环境Windows 10Miniconda3 with python 3.7.1PyQt5PyCharm前言控件是PyQt5应用程序的基石。PyQt5自带很多不同的控件,包括像button、check box、slider等等。在本节中我们将学习几个非常有用的控件,QCheckBox、ToggleButton、QSlider、QProgressBar和QCalendarWidget。QCh
目录一.显示二维表数据二.显示列数据三.扩展的列表控件四.扩展的表格控件五.在单元格中放置控件六.在表格中搜索Cell和行定位七.设置单元格字体和颜色八.按表格的某一列排序从本讲开始学习复杂控件。加油!一.显示二维表数据显示二维表数据(QTableVi ew控件)数据源 Model需要创建QTableView实例和一个数据源(Model) ,然后将两者关联,这个体系类似于MVC模式。一个QTabl
PyQt5快速入门教程(三) — 常用控件回顾上节课Qt Designer基础用法让python显示我们画的ui 什么你没有看? 好吧, 传送门走起本节课内容熟悉常用控件的功能熟悉常用控件的命令 QLabel(标签)QPushButton(按钮)QLineEdit(编辑框)QComboBox(下拉框)QCheckBox(复选框)QRadioButton(单选框)QListWidget(列表
关于控件自适应的窗口大小的设计内,目前我了解到的有两种。一种是在代码里面进行修改属性这类操作。一种是在Qt Designer里面进行布局。而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。网上百度了很多,多数说的很含糊,还有很多是用程序实现的,既然已经有Qt Creator那么高集成度的工具了,我还是倾向于直接在Qt Creator中通过可视化配置的方式完成
第十九章 列表控件、树形控件、表格控件19.1 列表控件QListWidget19.2 树形控件QTreeWidget19.3 表格控件QTableWidget19.4 小结列表控件可以让我们以列表形式呈现内容,使界面更加有序美观。QListWidget列表控件应当与QListWidgetItem一起使用,后者作为项被添加入列表控件中,也就是说列表控件中的每一项都是一个QListWidgetIte
软硬件环境Windows 10Python 3.4.2PyQt 5.5.1PyCharm 5.0.4前言控件是PyQt应用程序的基石。PyQt5自带很多不同的控件,包括像button、check box、slider等等。在本节中我们将学习几个非常有用的控件:QCheckBox、ToggleButton、QSlider、QProgressBar和QCalendarWidget。QCheckBox一
控件是构建应用程序的基本模块,PyQt5提供各种各样的控件,包括按钮、复选框、滑动条、列表框等。在这部分的教程中,我们将详细介绍几个常用的控件:QCheckBox,ToggleButton,QSlider,QProgressBar,QCalendarWidget。QCheckBoxQCheckBox复选框控件,它有两个状态:打开和关闭,他是一个带有文本标签(Label)的控件。复选框常用于表示程序
目录list view——列表视图table view——表格视图list view——列表视图创建一个list view步骤1、创建一个APP2、创建一个窗口3、在窗口中创建一个列表视图4、创建一个列表模(用于存放数据)5、创建一个数据源6、将数据源加载到列表模型中7、将列表模型加载到列表视图中8、添加点击事件等其他# list view控件,主要以列表的形式显示条目,即一行一行显示,当选中\单
一般我们创建PYQT5窗口的时候,都是使用绝对布局的,如果点击最大化按钮时,我们就会发现,窗口拉伸了,但是相应的控件的位置并没有按照比例进行拉伸,看起来非常不美观。举个例子:1.我们先随机创建一个窗口;2.当我们预览时,界面看起来还没有太大的问题; 3.然后我们点击最大化窗口;4.可以看到,只有主窗体被拉伸了,界面上的编辑框和Tab页还是原来的大小,这样看起来,视觉效果就不是
PyQt5控件控件是构建应用程序的基本模块,PyQt5提供各种各样的控件,包括按钮、复选框、滑动条、列表框等。在这部分的教程中,我们将详细介绍几个常用的控件:QCheckBox,ToggleButon,QSlider,QProgressBar,QCalendarWIdget。QCheckBox(复选框)QCheckBox复选框控件,它有两个状态:打开和关闭,他是一个带有文本标签(Label)的控件
在 Python 编程中,资源管理是保证程序稳定性和安全性的重要环节。with关键字作为 Python 的上下文管理器(Context Manager)机制,为文件操作、数据库连接、锁管理等场景提供了标准化的资源管理方案。本文将深入剖析with关键字的工作原理、使用场景及高级特性,帮助开发者写出更健 ...
ZooKeeper是一个分布式协调服务,通过树形结构的znode节点(持久/临时、带序号)实现数据一致性。集群包含Leader(处理事务请求)、Follower(转发事务)和Observer(提升读性能)三种角色。其监听机制支持一次性异步事件通知。常用场景包括配置管理、集群选举和分布式锁(通过顺序节点实现公平竞争)。操作命令包括create/get/set/delete等,支持节点监听。ZooKeeper通过全局事务ID和角色分工保证分布式环境下的数据一致性。
Dockerfile中CMD与ENTRYPOINT指令详解:支持exec和shell两种风格,exec形式直接执行命令(推荐生产环境使用),shell形式通过/bin/sh解释执行。主要区别:exec形式不支持变量展开和shell特性,但信号传递更可靠;shell形式支持变量和shell语法,但信号可能被拦截。ENTRYPOINT定义固定主命令,CMD提供默认参数或可覆盖命令,二者组合可实现"固定命令+默认参数"模式。dockerrun时的参数传递行为取决于Dockerfile中指令的配