首先画个图

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)的更多相关文章

  1. Restful framework【第七篇】权限组件

    基本使用 -写一个类: class MyPer(BasePermission): message='您没有权限' def has_permission(self, request, view): # ...

  2. Spring Cloud第七篇 | 声明式服务调用Feign

    本文是Spring Cloud专栏的第七篇文章,了解前六篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...

  3. Egret入门学习日记 --- 第七篇(书中 3.9节 内容)

    第七篇(书中 3.9节 内容) 好,今天就来看下 3.9节 的内容. 第一点: 昨天就已经搞定了. 第二点: 也包括在昨天的内容了. 第三点: 如果在构造函数里直接引用组件,就会挂掉. 但是把位置变化 ...

  4. 循序渐进VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用

    在我们开发BS页面的时候,往往需要了解常规界面组件的使用,小到最普通的单文本输入框.多文本框.下拉列表,以及按钮.图片展示.弹出对话框.表单处理.条码二维码等等,本篇随笔基于普通表格业务的展示录入的场 ...

  5. 循序渐进VUE+Element 前端应用开发(26)--- 各种界面组件的使用(2)

    在我们使用Vue+Element开发前端的时候,往往涉及到很多界面组件的使用,其中很多直接采用Element官方的案例即可,有些则是在这个基础上封装更好利用.更少代码的组件:另外有些则是直接采用第三方 ...

  6. ionic入门之色彩、图标、边距和界面组件:列表

    目录: 色彩.图标和边距 色彩 图标 内边距 界面组件:列表 列表:.list 成员容器:.item .item: 嵌入文本 .item : 嵌入图标 .item : 嵌入头像 .item : 嵌入缩 ...

  7. 解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)

    解剖SQLSERVER 第七篇  OrcaMDF 特性概述(译) http://improve.dk/orcamdf-feature-recap/ 时间过得真快,这已经过了大概四个月了自从我最初介绍我 ...

  8. 第七篇 Replication:合并复制-订阅

    本篇文章是SQL Server Replication系列的第七篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...

  9. 第七篇 SQL Server代理作业活动监视器

    本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这一系列的上一篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作 ...

随机推荐

  1. 【NX二次开发】Block UI 线型

    属性说明 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  2. QueryTable的使用以及错误

    1.QuerySeter的filter使用遇到的错误 1.1 Filter里的字段名和操作符要用双下划线."__" 不是" _",否则会被认为成是列名的一部分, ...

  3. Tomcat与spring的类加载器案例

    Tomcat与spring的类加载器案例接下来将介绍<深入理解java虚拟机>一书中的案例,并解答它所提出的问题.(部分类容来自于书中原文) Tomcat中的类加载器在Tomcat目录结构 ...

  4. ANDROID开发 Fatal signal 11(SIGSEGV) at 0x问题解决方案

    最近做ANDROID开发,也遇到了很多程序员遇到的一个问题:FATAL SIGNAL 11(SIGSEGV) at 0xxxxx,自然是各种搜索是否有人已然解决,虽然搜索出来的已有案例不少,基本都是内 ...

  5. uniapp 打包IOS 更新AppStore版本

    Hello 你好,我是大粽子. 最近随着新版本UI的发布APP也随之更新,随之而来的也就是IOS程序提审步骤,这次我详细的截图了每一个步骤,如果你正好也需要那么跟着我的节奏一步步来肯定是没问题的. 提 ...

  6. python返回列表最大值(java返回数组最大值)

    b=["3","2","1","6","5","2","1" ...

  7. Redis客户端管理

    1.客户端管理 Redis提供了客户端相关API对其状态进行监控和管理,本节将深入介绍各个API的使用方法以及在开发运维中可能遇到的问题. 1.1 客户端API 1.client list clien ...

  8. 温故知新,DotNet Core SDK和.Net CLI十八般武艺

    简介 .NET命令行接口 (CLI) 工具是用于开发.生成.运行和发布.NET应用程序的跨平台工具链. https://docs.microsoft.com/zh-cn/dotnet/core/too ...

  9. 为什么要鼓励小型企业使用CRM系统

    如果你是一家小公司的管理者,我相信你必须对工作流程.客户.市场销售.市场营销推广等业务流程进行总体规划和管理方法,这往往会使你的心有馀而力不足,引起 繁忙.心有馀而力不足.交流受到阻碍.管理方法和这样 ...

  10. Java:jar包与war包的差异

    一般将项目分为两层:服务层和表现层(视图层),通常我们把服务层打包成jar,而把视图层的包打成war包. 仔细对比可以发现: jar包中包含了你写程序的所有服务或者第三方类库,它通常是作为幕后工作者, ...