3.3 QSlider和QProgressBar
在UI Designer的组件面板里还有几个常见的用于输入和输出的组件。在Input Widgets分组里有QSlider和QScrollBar两个滑动型输入组件,在Display Widgets分组里的QProgressBar是进度条显示组件。这三个组件都有orientation属性,可以设置为水平或垂直样式。
使用这三个组件设计的示例Demo3_3运行时界面如图3-4所示。当滑动Slider或ScrollBar的滑块改变值时,都将当前值设置为ProgressBar的值。下面几个复选框和RadioButton按钮用于ProgressBar的显示效果设置。
图3-4 示例Demo3_3运行时界面
该示例是基于widgetApp项目模板的,下面是myWidget.py文件的完整代码:
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import pyqtSlot from ui_Widget import Ui_Widget class QmyWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) #调用父类构造函数,创建窗体 self.ui=Ui_Widget() #创建UI对象 self.ui.setupUi(self) #构造UI self.ui.slider.setMaximum(200) self.ui.scrollBar.setMaximum(200) self.ui.progressBar.setMaximum(200) self.ui.slider.valueChanged.connect(self.do_valueChanged) self.ui.scrollBar.valueChanged.connect(self.do_valueChanged) ## =======由connectSlotsByName() 自动关联的槽函数================= def on_radio_Percent_clicked(self): ##"显示格式--百分比" self.ui.progressBar.setFormat("%p%") def on_radio_Value_clicked(self): ##"显示格式--当前值" self.ui.progressBar.setFormat("%v") @pyqtSlot(bool) ##"textVisible" 复选框 def on_chkBox_Visible_clicked(self, checked): self.ui.progressBar.setTextVisible(checked) @pyqtSlot(bool) ##"InvertedAppearance"复选框 def on_chkBox_Inverted_clicked(self, checked): self.ui.progressBar.setInvertedAppearance(checked) ## ========自定义槽函数============================== def do_valueChanged(self, value): self.ui.progressBar.setValue(value)
QSlider和QScrollBar都是从QAbstractSlider类继承来的,拥有一些相同的属性,在属性编辑器里设置后即可看到效果,这些属性如下。
· minimum和maximum:输入范围的最小值和最大值。
· singleStep:单步长,拖动标尺上的滑块,或按下左/右键时的最小变化数值。
· pageStep:输入焦点在组件上时,按PgUp或PgDn键时变化的数值。
· value:组件的当前值,拖动滑块时自动改变此值,并限定在minimum和maximum定义的范围之内。
· sliderPosition:滑块的位置,若tracking属性设置为True, sliderPosition就等于value。
· tracking:sliderPosition是否等同于value,如果tracking设置为True,改变value时也同时改变sliderPosition。
· orientation:Slider或ScrollBar的方向,可以设置为水平或垂直。方向参数是枚举类型Qt.Orientation,其值包括:
♦ Qt.Horizontal(水平方向);
♦ Qt.Vertical(垂直方向)。
· invertedAppearance:显示方式是否反向,若invertedAppearance设置为False,水平的Slider由左向右数值逐渐增大,否则反过来。
· invertedControls:反向按键控制,若invertedControls设置为True,则按下PgUp或PgDn键时调整数值的方向相反。
属于QSlider的专有属性有两个,分别如下。
· tickPosition:标尺刻度的显示位置,使用枚举类型QSlider.TickPosition,其值包括:
♦ QSlider.NoTicks(不显示刻度);
♦ QSlider.TicksBothSides(标尺两侧都显示刻度);
♦ QSlider.TicksAbove(标尺上方显示刻度);
♦ QSlider.TicksBelow(标尺下方显示刻度);
♦ QSlider.TicksLeft(标尺左侧显示刻度);
♦ QSlider.TicksRight(标尺右侧显示刻度)。
· tickInterval:标尺刻度的间隔值,若设置为0,会在singleStep和pageStep之间自动选择。
QSlider和QScrollBar最常用的一个信号是valueChanged(int),在拖动滑块改变当前值时就会发射这个信号。
在QmyWidget类中定义了一个自定义槽函数do_valueChanged(int),这个槽函数的功能是根据传递来的参数value,设置为progressBar的当前值。在构造函数里有两条connect语句,即
self.ui.slider.valueChanged.connect(self.do_valueChanged) self.ui.scrollBar.valueChanged.connect(self.do_valueChanged)
这是将窗体上slider和scrollBar两个组件的valueChanged(int)信号都与这个自定义槽函数关联,因为它们的操作响应是完全一样的。如果还是按照生成自动关联的槽函数的方法,需要为这两个组件分别生成槽函数,但是两个槽函数里的代码是完全一样的。
QProgressBar的父类是QWidget,一般用于进度显示,常用属性有以下几个。
· minimum和maximum:最小值和最大值。
· value:当前值,可以设定或读取当前值。
· textVisible:是否显示文字,文字一般是百分比表示的进度。
· orientation:可以设置为水平或垂直方向。
· format:显示文字的格式,“%p%”显示百分比,“%v”显示当前值,“%m”显示总步数。默认为“%p%”。