第七篇 -- 常用界面组件的使用(QSlider和QProgressBar)
首先画个图

ui_proBar.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'ui_proBar.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.groupBox = QtWidgets.QGroupBox(Form)
self.groupBox.setGeometry(QtCore.QRect(10, 0, 381, 131))
self.groupBox.setTitle("")
self.groupBox.setObjectName("groupBox")
self.progressBar = QtWidgets.QProgressBar(self.groupBox)
self.progressBar.setGeometry(QtCore.QRect(150, 100, 201, 16))
self.progressBar.setProperty("value", 0)
self.progressBar.setObjectName("progressBar")
self.horizontalSlider = QtWidgets.QSlider(self.groupBox)
self.horizontalSlider.setGeometry(QtCore.QRect(150, 20, 161, 22))
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider.setObjectName("horizontalSlider")
self.label_3 = QtWidgets.QLabel(self.groupBox)
self.label_3.setGeometry(QtCore.QRect(30, 100, 61, 16))
self.label_3.setObjectName("label_3")
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setGeometry(QtCore.QRect(30, 20, 47, 13))
self.label.setObjectName("label")
self.horizontalScrollBar = QtWidgets.QScrollBar(self.groupBox)
self.horizontalScrollBar.setGeometry(QtCore.QRect(150, 60, 160, 16))
self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
self.horizontalScrollBar.setObjectName("horizontalScrollBar")
self.label_2 = QtWidgets.QLabel(self.groupBox)
self.label_2.setGeometry(QtCore.QRect(30, 60, 47, 13))
self.label_2.setObjectName("label_2")
self.groupBox_2 = QtWidgets.QGroupBox(Form)
self.groupBox_2.setGeometry(QtCore.QRect(10, 140, 381, 151))
self.groupBox_2.setObjectName("groupBox_2")
self.checkBox = QtWidgets.QCheckBox(self.groupBox_2)
self.checkBox.setGeometry(QtCore.QRect(30, 30, 70, 21))
self.checkBox.setObjectName("checkBox")
self.checkBox_2 = QtWidgets.QCheckBox(self.groupBox_2)
self.checkBox_2.setGeometry(QtCore.QRect(210, 30, 131, 17))
self.checkBox_2.setObjectName("checkBox_2")
self.radioButton = QtWidgets.QRadioButton(self.groupBox_2)
self.radioButton.setGeometry(QtCore.QRect(30, 80, 121, 17))
self.radioButton.setObjectName("radioButton")
self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox_2)
self.radioButton_2.setGeometry(QtCore.QRect(210, 80, 151, 17))
self.radioButton_2.setObjectName("radioButton_2") self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label_3.setText(_translate("Form", "ProcessBar"))
self.label.setText(_translate("Form", "Slider"))
self.label_2.setText(_translate("Form", "ScollBar"))
self.groupBox_2.setTitle(_translate("Form", "ProcessBar设置"))
self.checkBox.setText(_translate("Form", "textVisible"))
self.checkBox_2.setText(_translate("Form", "InvertedAppearance"))
self.radioButton.setText(_translate("Form", "显示格式--百分比"))
self.radioButton_2.setText(_translate("Form", "显示格式--当前值"))
然后自定义信号和槽
myWidget.py
#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
"""=================================================
@Project -> File : Operate-system -> myWidget.py
@IDE : PyCharm
@Author : zihan
@Date : 2020/4/8 14:29
@Desc :
================================================="""
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import pyqtSlot from ui_proBar import Ui_Form class QmyWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent) # 调用父类构造函数,创建窗体
self.ui = Ui_Form() # 创建UI对象
self.ui.setupUi(self) # 构造UI self.ui.horizontalSlider.setMaximum(200)
self.ui.horizontalScrollBar.setMaximum(200)
self.ui.progressBar.setMaximum(200)
# self.ui.progressBar.setStyleSheet("QProgressBar::chunk { background-color: rgb(255, 0, 0)}")
self.ui.progressBar.setStyleSheet("QProgressBar::chunk { background-color: rgb(255, 0, 0)}"
"QProgressBar{text-align: center}")
# self.ui.progressBar.setStyleSheet("QProgressBar{text-align: center;}")
self.ui.horizontalSlider.valueChanged.connect(self.do_valueChanged)
self.ui.horizontalScrollBar.valueChanged.connect(self.do_valueChanged) def on_radioButton_clicked(self): # 显示格式 -- 百分比
self.ui.progressBar.setFormat("%p%") def on_radioButton_2_clicked(self): # 显示格式 -- 当前值
self.ui.progressBar.setFormat("%v") @pyqtSlot(bool) # # "textVisible" 复选框
def on_checkBox_clicked(self, checked):
self.ui.progressBar.setTextVisible(checked) @pyqtSlot(bool) # # "InvertedAppearance" 复选框
def on_checkBox_2_clicked(self, checked):
self.ui.progressBar.setInvertedAppearance(checked) # # ========= 自定义槽函数 ==================
def do_valueChanged(self, value):
self.ui.progressBar.setValue(value) if __name__ == "__main__":
app = QApplication(sys.argv) # 创建app,用QApplication类
form = QmyWidget()
form.show()
sys.exit(app.exec_())
QSlider和QScrollerBar都是从QAbstractSlider类继承来的,拥有一些相同的属性,在属性编辑器里设置后即可看到效果,这些属性如下:
- minimum 和 maximum:输入范围的最小值和最大值
- singleStep:单步长,拖动标尺上的滑块,或按下左/右键时的最小变化数值。
- pageStep:输入焦点在组件上时,按PgUp或PgDn键时变化的数值。
- value:组件的当前值,拖动滑块时自动改变此值,并限定在minimum和maximum定义的范围之类。
- sliderPosition:滑块的位置,若tracking属性设置为True,sliderPosition就等于value。
- tracking:sliderPosition是否等同于value,如果tracking设置为True,改变value时也同时改变sliderPosition。
- orientation:Slider或ScollBar的方向,可以设置为水平或垂直。方向参数是枚举类型Qt.Orientation,其值包括Qt.Orientation(水平方向),Qt.Vertical(垂直方向)。
- invertedAppearance:显示方式是否反向,若invertedAppearance设置为False,水平的Slider由左向右数值逐渐增大,否则反过来。
- invertedControls:反向按键控制,若invertedControls设置为True,则按下PgUp或PgDn键时调整数值的方向相反。
属于Slider的专有属性有两个,分别如下。
1. tickPosition:标尺刻度的显示位置,使用枚举类型QSlider.TickPosition,其值包括:
- QSlider.NoTicks(不显示刻度)
- QSlider.TicksBothSides(标尺两侧都显示刻度)
- QSlider.TicksAbove(标尺上方显示刻度)
- QSlider.TicksBelow(标尺下方显示刻度)
- QSlider.TicksLeft(标尺左侧显示刻度)
- QSlider.TicksRight(标尺右侧显示刻度)
2. tickInterval:标尺刻度的间隔值,若设置为0,会在singleStep和pageStep之间自动选择。
QSlider和QScollBar最常用的一个信号是valueChanged(int),在拖动滑块改变当前值时就会发射这个信号。
在QmyWidget类中定义了一个自定义槽函数do_valueChanged(int),这个槽函数的功能是根据传递来的参数value,设置progressBar的当前值。在构造函数里有两条connect语句。这是将窗体上slider和scollBar两个组件的valueChanged(int)信号都与这个自定义槽函数关联,因为他们的操作响应是完全一样的。
QProcessBar的父类是QWidget,一般用于进度显示,常用的属性有以下几个:
1. minimum和maximum:最小值和最大值
2. value:当前值
3. textVisible:是否显示文字,文字一般是百分比表示的进度
4. orientation:可以设置为水平或垂直方向。
5. format:显示文字的格式,“%p%”显示百分比,“%v”显示当前值,“%m”显示总步数。默认是“%p%”
额外说一点,关于进度条颜色和百分比位置的部分:
self.ui.progressBar.setStyleSheet("QProgressBar::chunk { background-color: rgb(255, 0, 0)}"
"QProgressBar{text-align: center}")
效果:

ok.
第七篇 -- 常用界面组件的使用(QSlider和QProgressBar)的更多相关文章
- Restful framework【第七篇】权限组件
基本使用 -写一个类: class MyPer(BasePermission): message='您没有权限' def has_permission(self, request, view): # ...
- Spring Cloud第七篇 | 声明式服务调用Feign
本文是Spring Cloud专栏的第七篇文章,了解前六篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...
- Egret入门学习日记 --- 第七篇(书中 3.9节 内容)
第七篇(书中 3.9节 内容) 好,今天就来看下 3.9节 的内容. 第一点: 昨天就已经搞定了. 第二点: 也包括在昨天的内容了. 第三点: 如果在构造函数里直接引用组件,就会挂掉. 但是把位置变化 ...
- 循序渐进VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用
在我们开发BS页面的时候,往往需要了解常规界面组件的使用,小到最普通的单文本输入框.多文本框.下拉列表,以及按钮.图片展示.弹出对话框.表单处理.条码二维码等等,本篇随笔基于普通表格业务的展示录入的场 ...
- 循序渐进VUE+Element 前端应用开发(26)--- 各种界面组件的使用(2)
在我们使用Vue+Element开发前端的时候,往往涉及到很多界面组件的使用,其中很多直接采用Element官方的案例即可,有些则是在这个基础上封装更好利用.更少代码的组件:另外有些则是直接采用第三方 ...
- ionic入门之色彩、图标、边距和界面组件:列表
目录: 色彩.图标和边距 色彩 图标 内边距 界面组件:列表 列表:.list 成员容器:.item .item: 嵌入文本 .item : 嵌入图标 .item : 嵌入头像 .item : 嵌入缩 ...
- 解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)
解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译) http://improve.dk/orcamdf-feature-recap/ 时间过得真快,这已经过了大概四个月了自从我最初介绍我 ...
- 第七篇 Replication:合并复制-订阅
本篇文章是SQL Server Replication系列的第七篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...
- 第七篇 SQL Server代理作业活动监视器
本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这一系列的上一篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作 ...
随机推荐
- 内核、dns、网卡配置
升级内核(安装新版软件包) rpm -ivh kernel-3.10.0-123.1.2.el7.x86_64.rpm 二.配置永久IP地址,子网掩码,网关地址 /etc/sysconfig/ne ...
- 深入理解JVM,7种垃圾收集器,看完我跪了
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商.版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并 ...
- 聊一聊 Spring Boot 中 RESTful 接口设计规范
在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则.接口单一原则.接口过滤和接口组合等诸多因素,本篇文章将简要分 ...
- Linux中测试网络命令
ping IP -t 是持续性查看网络状态
- Django-ORM-事务和锁
一.锁 行级锁 返回一个锁住行,值到事物结束的查询集. 所有匹配的行将被锁住,直到事物结束,这就意味着可以通过锁防止数据被其他事务修改. 一般情况下如果其他事务锁定了相关行,那么本查询将被阻塞直到锁被 ...
- OO unit4 summary
Unit4 一.第四单元作业的架构设计 第四单元个人认为主要是考察对于层次结构的理解,即如何理解并处理好UML图的树状结构组织,在理好层次之间以及层次内部的相互关系之后,就只剩下代码实现的问题了.但是 ...
- Devops 改变coding —— 安装个指定版本的 jenkins 发现和想象的不太一样?
你好呀,我是小猿来也,一个刚开始折腾 Devops 的程序猿. 写在前面 前两天在池大那里看到了一段话,原话出自美团首席科学家夏华夏老师,具体内容我贴到了下面. 对于图片里的内容你们是怎么认为的呢?我 ...
- 2020年12月-第01阶段-前端基础-HTML CSS 项目阶段(四)
1. 品优购项目(四) 1). 详情页 detail.html 常用单词 名称 说明 主体 de_container 面包屑导航 crumb_wrap 产品介绍 product_intro ( int ...
- Android系统“资源调度框架”
Android系统"资源调度框架" 目录 Android系统"资源调度框架" 一.一些问题的思考 "资源"是什么 "资源" ...
- SpringBoot:SpringBoot项目的配置文件放在Jar包外加载
SpringBoot读取配置文件的优先级为: 第一.项目jar包同级下的config文件夹是优先级最高的,是在执行命令的目录下建config文件夹.(在jar包的同一目录下建config文件夹,执行命 ...